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

导读:本篇文章讲解 【蓝桥杯06】:给定小明的城堡图,请问,水的高度依次为1,2,3,….,H时,有多少块积木要被水淹。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

 【蓝桥杯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,2,3,....,H时,有多少块积木要被水淹。
#include <stdio.h>

int main(){
	int i,j,p,n,m,h,flag=0,a[100][100];
	scanf("%d %d",&n,&m);//第一行输入
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			scanf("%d",&a[i][j]);//输入城堡 
		}
	}
	scanf("%d",&h);//水高度的上限度
	for(p=1;p<=h;p++){
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(a[i][j]>0){
					flag++;
					a[i][j]--;
				} 
			}
		} 
	printf("%d\n",flag);
	}
	
	return 0;
} 

运行结果示例:

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


 Python解决:

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

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

运行结果示例:

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


 Java解决:

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

//给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
package lanqiao;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();//第一行输入的数
        int a[][] = new int[n][m];//数组
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                a[i][j] = sc.nextInt();
            }
        }
        int H = sc.nextInt();   //最高水限
        int flag = 0;
        for (int p = 1; p <= H; p++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if (a[i][j] >= p) {
                        flag++;
                    }
                }
            }
            System.out.println(flag);
        }
    }
}

运行结果示例:

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

总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73643.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!