• 【蓝桥杯06】:给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。


     

    问题描述:

            小明用积木搭了一个城堡。
            为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个n行m列的方格图上,每个积木正好占据方格图的一个小方格。
            当然,小明的城堡并不是平面的,而是立体的。小明可以将积木垒在别的积木上面。当一个方格上的积木垒得比较高时,就是一个高塔,当一个方格上没有积木时,就是—块平地。
            小明的城堡可以用每个方格上垒的积木层数来表示。例如,下面就表示一个城堡。

            9   3   3    1

            3   3    3   0

            0   0    0   0

            这个城堡南面和东面都有空地,西北面有一个大房子,在?北角还有一个高塔,东北角有一个车库。
            现在,格格巫要来破坏小明的城堡,他施了魔法水淹小明拍城堡。
            如果水的高度为1,则紧贴地面的那些积木要被水淹,在上面的例子中,有7块积木要被水淹。
            如果水的高度为2,则更多积木要被水淹,在上面的例子中,有13块积木要被水淹。
            给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。

    输入格式:

            输入的第一行包含两个整数n, m。
            接下来n行,每行m个整数,表示小明的城堡中每个位置积木的层数。
            接下来包含一个整数H,表示水高度的上限。

    输出格式:

            输出H行,每行—个整数。第i的整数表示水的高度为i时被水淹的积木数量

    样例输入:

            3 4

            9   3   3   1

            3    3  3  0

            0    0  0   0

            10

    样例输出:

            7

            13

            19

            20

            21

            22

            23

            24

            25

            25

    评测用例规模与约定

            对于40%的评测用例,1<= n, m <= 100,1 <= H<=100,积木层数不超过100;
            对于70%的评测用例,1<= n, m <= 1000,1 <= H<=1000,积木层数不超过1000;


    C语言解决:        

            给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。

    1. //给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
    2. #include
    3. int main(){
    4. int i,j,p,n,m,h,flag=0,a[100][100];
    5. scanf("%d %d",&n,&m);//第一行输入
    6. for(i=0;i
    7. for(j=0;j
    8. scanf("%d",&a[i][j]);//输入城堡
    9. }
    10. }
    11. scanf("%d",&h);//水高度的上限度
    12. for(p=1;p<=h;p++){
    13. for(i=0;i
    14. for(j=0;j
    15. if(a[i][j]>0){
    16. flag++;
    17. a[i][j]--;
    18. }
    19. }
    20. }
    21. printf("%d\n",flag);
    22. }
    23. return 0;
    24. }

    运行结果示例:


     Python解决:

            给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。

    1. # 给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
    2. n, m = map(int, input().split()) # 第一行输入整数 行列
    3. line = []
    4. for i in range(n):
    5. # 将input的值传入x 加入line 并且输入的时候按空格隔开
    6. line = line + [int(x) for x in input().strip().split(' ')]
    7. h = int(input()) # 高度
    8. flag = 0
    9. for p in range(1, h+1):
    10. for i in range(0, n*m):
    11. if line[i] >= p:
    12. flag += 1
    13. print(flag)

    运行结果示例:


     Java解决:

            给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。

    1. //给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
    2. package lanqiao;
    3. import java.util.Scanner;
    4. public class Test {
    5. public static void main(String[] args) {
    6. // TODO Auto-generated method stub
    7. Scanner sc = new Scanner(System.in);
    8. int n = sc.nextInt();
    9. int m = sc.nextInt();//第一行输入的数
    10. int a[][] = new int[n][m];//数组
    11. for (int i = 0; i < n; i++) {
    12. for (int j = 0; j < m; j++) {
    13. a[i][j] = sc.nextInt();
    14. }
    15. }
    16. int H = sc.nextInt(); //最高水限
    17. int flag = 0;
    18. for (int p = 1; p <= H; p++) {
    19. for (int i = 0; i < n; i++) {
    20. for (int j = 0; j < m; j++) {
    21. if (a[i][j] >= p) {
    22. flag++;
    23. }
    24. }
    25. }
    26. System.out.println(flag);
    27. }
    28. }
    29. }

    运行结果示例:

    总结

                  本题思路参照百度,大家自行学习思想,算法最重要的就是其思想!

  • 相关阅读:
    腾讯云HiFlow场景连接器
    分布式 - 公司使用什么RPC框架,聊聊你理解的RPC原理
    华为OD机试 - 智能驾驶 - 广度优先搜索(Java 2024 C卷 200分)
    Netty(三)- NIO三大组件之Channel
    正则校验与时间格式化
    Ectd Raft 模块介绍(二):目录文件介绍
    阿里P8大佬,带来的Tomcat架构详解,真的颠覆你的认知
    lvgl 显示图片示例
    华为CD32键盘使用教程
    【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
  • 原文地址:https://blog.csdn.net/oxygen23333/article/details/127398702