奇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;
    }

}

 

posted @ 2019-08-15 23:12  离愁i  阅读(340)  评论(0编辑  收藏  举报