360:计算表面积

题目描述

 

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

 

https://leetcode-cn.com/problems/surface-area-of-3d-shapes/

https://www.cnblogs.com/hdyss/p/10800162.html

 

上一篇:[hdu-6867]Tree 树上前缀和 2020多校9


下一篇:树莓派联网找不到IP解决方案