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)

你可能感兴趣的:(算法工程师)