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

相关推荐

xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
09-22 22:22
中山大学 Java
双尔:赌对了,不用经历秋招的炼狱真的太好了,羡慕了
点赞 评论 收藏
分享
09-22 11:42
门头沟学院 Java
现在还很懵,不是什么很好的工资,但是很怕拒绝了秋招就没有offer了试用期3个月&nbsp;无责底薪7k➕绩效&nbsp;转正8k&nbsp;base南昌&nbsp;没有住房补贴&nbsp;餐补&nbsp;不知道作为一个应届生这个待遇怎么样?
白火同学:南昌能给到8k,还有绩效其实不错了。因为南昌房租不高,我22年在谢家村那边市中心租房只要1k就能租到还不错的房子,其他消费也是正常省会水平,所以南昌8k ≈ 一线10k上下吧。双非应届校招能拿这个薪资水平确实可以了,唯一不足的就是南昌IT行业整体不太行,以后跳槽多少有点不方便。
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

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