问题描述:
小明用积木搭了一个城堡。
为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个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;
}
运行结果示例:
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)
运行结果示例:
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);
}
}
}
运行结果示例:
总结
本题思路参照百度,大家自行学习思想,算法最重要的就是其思想!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73643.html