标签:lin 多少 += mat scanner can ++ 输入 import
<一>表面积
将长N*M厘米的矩形区域划分成N行M列(每行每列的宽度均为1厘米),在第i行第j列的位置上叠放Ai,j个边长为1厘米的正方体(1<=Aij<=100) ,所有正方体就组成了一个立体图形,每个正方体六个面中的一部分会被其它正方体遮挡,未被遮挡的部分的总面积即为该立体图形的表面积,那么该立体图形的表面积是多少平方厘米?
输入
第一行包含两个整数N和M.1sN, Ms1000.
接下来N行,每行包含M个整数,第i行的第j个整数表示Ajp
输出
输出表面积的大小。
特例输入:
2 2
2 1
1 1
特例输出:
20
代码如下:
package com.ymm.core.sanliuling;
import java.util.Scanner;
public class Mian5 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
if(N <= 0|| M <= 0) {
System.out.println(0);
}
int[][] a = new int[N][M];
for(int i = 0;i < N;i++){
for(int j = 0;j < M;j++){
a[i][j] = in.nextInt();
}
}
System.out.println(count(a));
}
private static int count(int[][] arr) {
int[] rpw = new int[] {0,1,0,-1};
int[] rdw = new int[] {1,0,-1,0};
int res = 0;
for(int i = 0;i < arr.length;i++) {
for(int j = 0; j < arr[0].length;j++) {
if(arr[i][j] > 0) {
res += 2;
for(int n = 0;n < 4;n++) {
int np = i + rpw[n];
int nd = j + rdw[n];
int nres = 0;
if(np >= 0 && np < arr.length &&
nd >= 0 && nd < arr[0].length) {
nres = arr[np][nd];
}
res += Math.max(arr[i][j] - nres, 0);
}
}
}
}
return res;
}
}
标签:lin 多少 += mat scanner can ++ 输入 import
原文地址:https://www.cnblogs.com/youdiaodaxue16/p/11361184.html