奇3场景算法(Java实现)
<一>表面积
将长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; } }