小明用积木搭了一个城堡。
为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个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;
给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
- //给定小明的城堡图,请问,水的高度依次为1,2,3,....,H时,有多少块积木要被水淹。
- #include
-
- int main(){
- int i,j,p,n,m,h,flag=0,a[100][100];
- scanf("%d %d",&n,&m);//第一行输入
- for(i=0;i
- for(j=0;j
- scanf("%d",&a[i][j]);//输入城堡
- }
- }
- scanf("%d",&h);//水高度的上限度
- for(p=1;p<=h;p++){
- for(i=0;i
- for(j=0;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);
- }
- }
- }
运行结果示例:
总结
本题思路参照百度,大家自行学习思想,算法最重要的就是其思想!
-
相关阅读:
腾讯云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