舍罕王的失算版答案疑问
麻烦帮忙看看有什么不对的?和课后答案相差1,是哪里有问题呢?看了答案自己没找出差异,麻烦帮忙看看。i=0
while i <= 64:
sum1=2**i
i = i + 1
print("舍罕王应该给达依尔", sum1, "粒麦子!")
-----------------------------------
解出:舍罕王应该给达依尔 18446744073709551616 粒麦子!
i=0
sum1=0
while i <= 63:
sum1=sum1+2**i
i = i + 1
print("舍罕王应该给达依尔", sum1, "粒麦子!")
暂时没有找出问题,不过说相差了1,或许可以这样写{:10_260:}:
i=0
while i <= 64:
sum1=2**i
sum1 -= 1 #这里可以是+=1,要看相差的是多了还是少了
i = i + 1
print("舍罕王应该给达依尔", sum1, "粒麦子!") sum1初始化没弄好
设为0再试试
i=0
sum1=0
while i <= 63:
sum1=sum1+2**i
i = i + 1
print("舍罕王应该给达依尔", sum1, "粒麦子!")
sum1 是要初始化的 , 你这样循环每次 sum1 的值只是那一个格子的麦子
应该是每次循环都算出来, 加给 sum1 , 这样才是正确答案
i = 0
sum_ = 0
while i <= 63:
sum_ += 2 ** i
i += 1
print(sum_)
至于为什么循环到 63 , 第一个格子是 2 的 0 次方 , 不是 1 次方
所以第 64 个格子是 2 的 63 次方 , 自己数一下就明白了
然后 2 ^0 + 2 ^ 1 + ... + 2 ^ 63 == 2 ^ 64 - 1
所以可以直接这么写 :print(2 ** 64 - 1) 柿子饼同学 发表于 2022-8-29 20:13
sum1 是要初始化的 , 你这样循环每次 sum1 的值只是那一个格子的麦子
应该是每次循环都算出来, 加给 sum1...
明白了思路了,但是另外请教下,题目说第1-3的格子依次是:1,2,4
如果按这个步骤解答的话,第1-3的格子依次为:1,3,7。包括小甲鱼的答案我按他的步骤校验1-3格子也是分别为1,3,7。可是这样不是会偏离题目吗? dearbolo 发表于 2022-8-29 23:37
明白了思路了,但是另外请教下,题目说第1-3的格子依次是:1,2,4
如果按这个步骤解答的话,第1-3的格子 ...
不是吧 , 根据题意 , 第一个格子 1 , 后面每个格子是前一个的两倍
所以是 1 2 4 8 16 ... 这样 asky533 发表于 2022-8-29 17:28
暂时没有找出问题,不过说相差了1,或许可以这样写:
按你的思路
print(18446744073709551615)
正解
页:
[1]