小白Python练习册(21)【鱼币福利】
本帖最后由 冰河星云 于 2021-8-27 11:02 编辑时隔一年。。。我回来了(虽然@WangJS 没回来
那么让我们开始做题吧
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8 * 8 共 64 格的象棋说:“陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格放 1 粒,第 2 格放 2 粒,第三格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘 64 格,我就感激不尽了。”。舍罕王听了达依尔这个“小小”的要求,想都没想就满口答应下来。
结果在给达依尔麦子时舍罕惊奇地发现要给的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。请问,舍罕王要兑现他的许诺共要多少粒麦子赏赐他的宰相?
代码如下:(应该是正确的**** Hidden Message *****
如果你有更好的方法可以提出!
如果喜欢,别忘了评分订阅哟(传送门)!{:9_227:}
https://xxx.ilovefishc.com/forum/202005/07/210909qzqwwzwmrtrzsqts.gif https://xxx.ilovefishc.com/forum/202005/07/210915e5h6oqytuaoy6z67.gif(我如果有空会把答对的人的鱼币加上的,再等等!) >>> 2**65-1
36893488147419103231 上面是对的吗 深谙流年 发表于 2021-8-27 01:47
上面是对的吗
应该吧。。。{:10_277:} 厉害了 深谙流年 发表于 2021-8-27 01:47
上面是对的吗
我错了,应该从0开始,是2 ** 64- 1
1格:1粒=2**(0+1) - 1
2格:1 + 2粒 = 2**(1+1) - 1
3格:1 + 2 + 4粒 = 2**(2+1) - 1 网上搜了一下,这回的结果一致了。
应该要用到幂运算 {:7_139:} 666 没太看懂,小甲鱼能详细讲一下吗? {:5_95:} {:5_106:} def rice_num():
total = 0
for i in range(64):
total += 2**i
weight = total / 25000
print("共要%d粒麦子赏赐他的宰相,应该给予%.2f公斤麦子" % (total, weight))
if __name__ == "__main__":
rice_num()
看 1 print(sum(list(map(lambda x: 2**x, range(64)))))
来采矿了 #上过高中的其实可以直接用等比数列求和公式 我写的稍微简单一点
n = int(input("输入格数:"))
sumnum = 0
for i in range(1,n+1): #第一格到第n格
sumnum += 2**(i-1) #每格依次加一倍 加到总数里
print("总麦粒数:%d"%sumnum) #结果应该是2的n次方减一
结果
输入格数:64
总麦粒数:18446744073709551615
>>> 2**64-1
18446744073709551615 666 没有头绪,让我康康