Description
zyf有一堆的1x1x1的正方体积木,他在一个n*m的网格的每个格子上随便堆积了若干个积木。如图所示:
1 2 3 4
0 5 7 0
0 1 1 0
2 1 0 1
4*4的网格上,每个网格位置上的数字表示这个位置有多少个网格堆积,求这些积木裸露在外面的面积。
Input
输入数据的第一行有一个整数T,表示有T组测试数据。
每组数据的第一行有两个整数,代表n 和 m (0< n,m <100),
接下来有n行,每行m个整数,表示这个位置堆积积木的个数i(0 <= i <= 100)。
Output
输出一个整数,表示这些积木裸露在外面的面积。
每组测试数据输出一行。
Sample Input
1
4 4
1 2 3 5
0 5 7 0
0 1 1 0
2 1 0 1
Sample Output
85
#include<stdio.h> #include<string.h> int get_max(int num1,int num2); int main(void){ int num1,a[110][110],sum; int i,j,m,n; scanf("%d",&num1); while(num1--){ sum=0; memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ scanf("%d",&a[i][j]); } } for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if(a[i][j]!=0){ sum++;//顶上的面 } sum+=get_max(a[i][j]-a[i][j-1],0);左边的面 sum+=get_max(a[i][j]-a[i][j+1],0);右边的面 sum+=get_max(a[i][j]-a[i+1][j],0);前面的面 sum+=get_max(a[i][j]-a[i-1][j],0);后面的面 } } printf("%d\n",sum); } } int get_max(int num1,int num2){ if(num1<=num2){ return num2; } else{ return num1; } }