360编程题,方块表面积
在一个N*M的矩形区域中,堆放小方块,求表面积。
输入
第一行N,M ;代表N行M列的矩形区域
接下来是N行,每行有M个数值。代表每个位置堆放的小方块数
输出
一个数,表面积
例如
输入
2,2
2,1
1,1
输出
20
在一个2行2列的区域放方块,第1行1列堆放了2个,第1行2列放1个...
最先开始的思路
6个视图面积加和 从上向下看+从下向上看+从左向右看+从右向左看+从前向后看+从后向前看
两个对立面,面积相等。但答案是错的,没考虑 凹 的情况
N,M = [ int(i) for i in input().strip().split()] A = [] for i in range(N): A.append( [ int(i) for i in input().strip().split()] ) sum = 0 zuo = 0 for i in range(N): zuo += max(A[i]) qian = 0 for j in range(M): tmp = [] for i in range(N): tmp.append(A[i][j]) qian += max(tmp) shang = 0 for i in range(N): for i in range(M): if A[i][j]>0: shang += 1 sum = 2*zuo+2*qian+2*shang print(sum)
思路2-没测试,不知道是不是对的
当前位置存在的最多面积数-纵向堆叠重合面积-与前面重合面积-与后面重合面积-与左面重合面积-与右面重合面积
if __name__=="__main__": N,M = [ int(i) for i in input().strip().split()] for i in range(N): A.append( [ int(i) for i in input().strip().split()] ) ''' 自测用 N,M = 2,2 A = [[2,1],[1,1]] # 20 N,M = 3,3 A = [[2,1,2],[2,1,2],[2,1,2]] #46 ''' sum = 0 #import pdb;pdb.set_trace() for i in range(N): for j in range(M): #import pdb;pdb.set_trace() area = 0 if A[i][j] >0 :area = 6*A[i][j]-2*(A[i][j]-1) if i<N-1: area -= min( A[i][j] , A[i+1][j])#qian if i>=1: area -= min(A[i][j] , A[i-1][j]) #hou if j<M-1: area -= min(A[i][j] , A[i][j+1])# zuo if j>=1: area -= min(A[i][j] , A[i][j-1]) # you sum += area print(sum)