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)



#360公司##笔试题目#
全部评论
哇好不容易看到一个Python小伙伴,分享一下思路 n,m = [int(x) for x in input().split()] A = [] for i in range(n): A.append([int(x) for x in input().split()]) result = 0 #上下表面积都等于n*m result += n*m*2 #A[i][j]左边的面积取决于A[i][j-1]的高度,右边的面积取决于A[i][j+1]的高度 #A[i][j]后面的面积取决于A[i-1][j]的高度,前面的面积取决于A[i+1][j]的高度 for i in range(n):     for j in range(m):         #左边         if j == 0:          result += A[i][j]         else:          result += max(0, A[i][j] - A[i][j-1])                  #右边         if j == m-1:          result += A[i][j]         else:          result += max(0, A[i][j] - A[i][j+1])                  #后面         if i == 0:          result += A[i][j]         else:          result += max(0, A[i][j] - A[i-1][j])                  #前面         if i == n-1:          result += A[i][j]         else:          result += max(0, A[i][j] - A[i+1][j]) print(result)
点赞 回复 分享
发布于 2019-08-15 21:48
第一段代码仿佛看到了我写的😂
点赞 回复 分享
发布于 2019-08-15 22:26
对于每一块,只算4个方向上比它低的方向上的面积就行了
点赞 回复 分享
发布于 2019-08-15 21:46

相关推荐

明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务