360笔试真题2020 表面积

题目描述:
将长N*M厘米的矩形区域划分成N行M列(每行每列的宽度均为1厘米),在第i行第j列的位置上叠放Ai,j个边长为1厘米的正方体(1≤Ai,j≤100),所有正方体就组成了一个立体图形,每个正方体六个面中的一部分会被其它正方体遮挡,未被遮挡的部分的总面积即为该立体图形的表面积,那么该立体图形的表面积是多少平方厘米?

思路:用二维数组接收数据后,为防止越界,先给数组外围加一圈0。遍历原二维数组,对于任意位置,先计算当前位置的表面积,等于1为mat[i][j]*6,大于1为mat[i][j]*6-(mat[i][j]-1)*2,之后遍历该位置上下左右四个位置,减去遮挡面积。

import sys
n, m = [int(x) for x in sys.stdin.readline().strip().split()]
mat = []
mm = []
mm = [0 for _ in range(m+2)]
mat.append(mm)
for i in range(n):
    mm = []
    mm = [0] + [int(x) for x in sys.stdin.readline().strip().split()]
    mm.append(0)
    mat.append(mm)
mm = []
mm = [0 for _ in range(m+2)]
mat.append(mm)
cur = 0
for i in range(1, n+1):
    for j in range(1, m+1):
        cur += mat[i][j]*6
        if mat[i][j] > 1:
            cur -= (mat[i][j]-1)*2
        cur -= min(mat[i][j], mat[i - 1][j])
        cur -= min(mat[i][j], mat[i + 1][j])
        cur -= min(mat[i][j], mat[i][j - 1])
        cur -= min(mat[i][j], mat[i][j + 1])
print(cur)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值