题目描述
360公司 2020秋招 技术综合C卷在线考试 编程题 | 20.0分1/2 表面积 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 将长N*M厘米的矩形区域划分成N行M列(每行每列的宽度均为1厘米),在第i行第j列的位置上叠放Ai,j个边长为1厘米的正方体(1≤Ai,j≤100),所有正方体就组成了一个立体图形,每个正方体六个面中的一部分会被其它正方体遮挡,未被遮挡的部分的总面积即为该立体图形的表面积,那么该立体图形的表面积是多少平方厘米? 样例解释: 输入 第一行包含两个整数N和M,1≤N,M≤1000。 接下来N行,每行包含M个整数,第i行的第j个整数表示Ai,j。 输出 输出表面积的大小。 样例输入 2 2 2 1 1 1 样例输出 20
思路:
leetcode 892,三维形体的表面积
代码1
作者:MR丶锐 链接:https://www.nowcoder.com/discuss/224643?type=0&order=0&pos=30&page=0 来源:牛客网 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int N = sc.nextInt(); int M = sc.nextInt(); int[][] x = new int[N][M]; int sum=0; int pai = 0;//Z遮挡 for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { x[i][j] = sc.nextInt(); pai = pai + x[i][j]-1 ; sum=sum+x[i][j]; } } int hang = 0;//Y遮挡 for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if(j==M-1){ break; } if (x[i][j] >= x[i][j + 1]) { hang = hang + x[i][j + 1]; } else { hang = hang + x[i][j]; } } } int qian=0;//X遮挡 for (int i=0;i<N;i++){ for (int j=0;j<M;j++){ if(i==N-1){ break; } if (x[i][j] >= x[i+1][j]) { qian = qian + x[i+1][j]; } else { qian = qian + x[i][j]; } } } System.out.println(sum*6-hang*2-pai*2-qian*2); } } }
代码2;
作者:沈文兵 链接:https://www.nowcoder.com/discuss/224643?type=0&order=0&pos=30&page=0 来源:牛客网 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int n = sc.nextInt(); int m = sc.nextInt(); int[][] a = new int[n][m]; int size = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { a[i][j] = sc.nextInt(); size += a[i][j]; } } int count = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int temp = a[i][j]; count = count + (temp - 1) * 2; if ((j - 1) >= 0) { count = count + Math.min(a[i][j], a[i][j - 1]) * 2; } if ((i - 1) >= 0) { count = count + Math.min(a[i][j], a[i - 1][j]) * 2; } } } System.out.println(size*6 - count); } } }