题目:
第一行输入两个数N 和 M (N>=1,M<=1000)
接下来N行,每行输入M个整数,第i行的第j个整数表示Aij.
输出的是该立体图形的表面积。
import java.util.Scanner;
public class Test {
public static int surface(int[][] arr) {
int res=0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
if(arr[i][j]!=0) {
res+=arr[i][j]*4+2;//总面积res,此处加上了一些重复的面
}
if(i>0) {//减去前后重叠的面
res-=Math.min(arr[i-1][j], arr[i][j])*2;//总面积-前后重复加的面
}
if(j>0) {//减去左右重叠的面
res-=Math.min(arr[i][j-1], arr[i][j])*2;//总面积-左右重复加的面
}
}
}
return res;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int M=in.nextInt();
int[][]arr=new int[N][M];
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
arr[i][j]=in.nextInt();
}
}
System.out.println(surface(arr));
}
}
输入:
2 2
2 1
1 1
输出:
20