【编程题】立体表面积

4 篇文章 0 订阅

【题目描述】

将长度N*M厘米的矩形区域均匀划分成N行M列(长度均为1厘米),在第i行第j列分比放上Aij个百年长为1厘米的立方体(1<=Aij
<=100),所有立方体形成一个立体图形。求该立体图形的表面积。

【输入】

第一行输入两个整数N和M,1<=N, M<=100;
接下俩N行,每行输入M个整数,第i行的第j个数字表示Aij

【输出】

输出表面积的大小

【示例输入】

2 2
2 1
1 1

【示例输出】

20

【思路】

  • 统计总共小立方体个数count,计算总的表面积count * 6
  • 分别统计重叠部分:左右方向的重叠、前后方向的重叠和上下方向的重叠
  • 相减得到所求表面积

【java代码实现】

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int m = sc.nextInt();
    int count = 0;
    int overlap = 0;
    int[][] arr = new int[n][m];
    for (int i = 0; i < n; i++) {
      int temp = -1;
      for (int j = 0; j < m; j++) {
        arr[i][j] = sc.nextInt();
        if (temp >= 0) {
          overlap += Math.min(temp, arr[i][j]);//1:左右方向的重叠
        }
        temp = arr[i][j];
        count += arr[i][j];
        overlap += (arr[i][j] - 1);//2:上下方向的重叠
      }
    }

    for (int i = 0; i < m; i++) {
      int temp = -1;
      for (int j = 0; j < n; j++) {
        if (temp >= 0) {
          overlap += Math.min(temp, arr[j][i]);//3:前后方向的重叠
        }
        temp = arr[j][i];
      }
    }

    int area = count * 6 - overlap * 2;
    System.out.println(area);
  }

以上为刚出炉的360提前批笔试题第一题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值