关注
哈喽,虽然我们现在彼此不认识,但是很高兴认识你 这两天我一直在认真思考这道题的解法,并且多次尝试用代码实现,不过就是卡住,用代码实现总是报错 后来发现是自己找到了递推公式 a[i]=a[i-1] + i + 1 i >= 1 a[0]=1,想直接用递推公式进行代码实现,后来苦想了两天(哭,可惜我不是那种智商贼高,一点就透的人,不仅花了两天时间,而且期间因为做不出来搞的贼痛苦。。)才发现要回到高中数学,用递推公式求通项式: a[i]=a[i-1] + i + 1 a[i]-a[i-1] = i + 1 a[i-1]-a[i-2] = i a[i-2]-a[i-3] = i - 1 . . . a[2]-a[1] = 3 a[1]-a[0] = 2 将以上式子相加得到: a[i]-a[0]= i + 1 + i + i-1 + ... + 3 + 2 因为a[0]=1,所以有: a[i] = i + 1 + i + i-1 + ... + 3 + 2 + 1 或许你和我一样模模糊糊记得高斯小时候如何计算从1到100的和那个小故事: 大约在高斯十岁的时候,老师在算数课上出了一道难题:「把1到100的整数写下来,然后把它们加起来!」高斯的答案上只有一个数字:5050 老师吃了一惊,高斯就解释他如何找到答案:1+100=101,2+99=101,3+98=101,……,49+52=101,50+51=101,一共有50对和为101的数目,所以答案是50×101=5050。 a[i] = i + 1 + i + i-1 + ... + 3 + 2 + 1 中,i + 1 后面的i + i-1 + ... + 3 + 2 + 1 就跟高斯的算法一样,有二分之一 i 对 i+1,再加上前面一个i+1(这里考虑i为奇偶数后,依然是这个结果),就是1/2i+1 对 i + 1, 那么他们的和就是(1/2i+1)* ( i + 1)= (i+2)*(i+1)/2 这样我们就得到了 a[i] =(i+2)*(i+1)/2,也就是第一行的元素的计算公式。 从而我们就能看懂评论区解法中的一种,的核心代码:res=[(e+2)*(e+1)//2 for e in range(N)],其实就是利用我们计算出的公式,来计算第一行的元素。 这个题的第一行计算出来,后面的就简单了,下一行是上一行除去第一个数以后的其它数减1,以此类推,就可以得到整个蛇形矩阵。 代码可以参考: import sys for line in sys.stdin: N=int(line.strip()) res=[] for i in range(N): if i==0: res=[(e+2)*(e+1)//2 for e in range(N)] else: res=[e-1 for e in res[1:]] # print(res) #其实到这里核心代码就结束了 for t in res: print(t,end=" ") print()
1
相关推荐
查看11道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试___岗的必刷题单 #
2242次浏览 41人参与
# 你今年的保底offer是哪家 #
171373次浏览 717人参与
# 神州信息求职进展汇总 #
1536次浏览 36人参与
# 春招开局,你有保底offer吗? #
7348次浏览 66人参与
# 如果不上班,你会去做什么 #
33153次浏览 477人参与
# 实习生至暗时刻 #
2342次浏览 48人参与
# 应届生被毁约被毁意向了怎么办 #
58995次浏览 294人参与
# 硬件开发岗知多少 #
24001次浏览 138人参与
# 哪些公司开暑期实习了? #
4262次浏览 37人参与
# 如果上班像打游戏,你最想解锁什么技能 #
26735次浏览 95人参与
# AI面试问题分享 #
3516次浏览 78人参与
# 实习生的生存小技巧 #
2078次浏览 44人参与
# 你经历过哪些AI幻觉? #
1551次浏览 35人参与
# 找AI工作应该卷什么? #
1169次浏览 25人参与
# 三月的小目标 #
2020次浏览 49人参与
# 小厂一定不能去吗? #
7097次浏览 86人参与
# 关于春招你都做了哪些准备? #
130510次浏览 724人参与
# 你面试被问到过哪些不会的问题? #
113544次浏览 1905人参与
# 作业帮求职进展汇总 #
102056次浏览 615人参与
# 非技术岗简历怎么写 #
299695次浏览 3224人参与
# 非技术岗薪资爆料 #
497015次浏览 3055人参与

格力公司福利 459人发布