dearbolo 发表于 2022-8-29 16:51:29

舍罕王的失算版答案疑问

麻烦帮忙看看有什么不对的?和课后答案相差1,是哪里有问题呢?看了答案自己没找出差异,麻烦帮忙看看。
i=0

while i <= 64:
    sum1=2**i
    i = i + 1

print("舍罕王应该给达依尔", sum1, "粒麦子!")

-----------------------------------
解出:舍罕王应该给达依尔 18446744073709551616 粒麦子!


青出于蓝 发表于 2022-8-29 17:20:43

i=0
sum1=0
while i <= 63:
    sum1=sum1+2**i
    i = i + 1

print("舍罕王应该给达依尔", sum1, "粒麦子!")

asky533 发表于 2022-8-29 17:28:32

暂时没有找出问题,不过说相差了1,或许可以这样写{:10_260:}:
i=0

while i <= 64:
    sum1=2**i
    sum1 -= 1 #这里可以是+=1,要看相差的是多了还是少了
    i = i + 1

print("舍罕王应该给达依尔", sum1, "粒麦子!")

编程追风梦 发表于 2022-8-29 19:39:47

sum1初始化没弄好
设为0再试试
i=0
sum1=0
while i <= 63:
    sum1=sum1+2**i
    i = i + 1

print("舍罕王应该给达依尔", sum1, "粒麦子!")

柿子饼同学 发表于 2022-8-29 20:13:36

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)

dearbolo 发表于 2022-8-29 23:37:34

柿子饼同学 发表于 2022-8-29 20:13
sum1 是要初始化的 , 你这样循环每次 sum1 的值只是那一个格子的麦子
应该是每次循环都算出来, 加给 sum1...

明白了思路了,但是另外请教下,题目说第1-3的格子依次是:1,2,4
如果按这个步骤解答的话,第1-3的格子依次为:1,3,7。包括小甲鱼的答案我按他的步骤校验1-3格子也是分别为1,3,7。可是这样不是会偏离题目吗?

柿子饼同学 发表于 2022-8-30 08:47:27

dearbolo 发表于 2022-8-29 23:37
明白了思路了,但是另外请教下,题目说第1-3的格子依次是:1,2,4
如果按这个步骤解答的话,第1-3的格子 ...

不是吧 , 根据题意 , 第一个格子 1 , 后面每个格子是前一个的两倍
所以是 1 2 4 8 16 ... 这样

青出于蓝 发表于 2022-8-30 09:39:27

asky533 发表于 2022-8-29 17:28
暂时没有找出问题,不过说相差了1,或许可以这样写:

按你的思路
print(18446744073709551615)
正解
页: [1]
查看完整版本: 舍罕王的失算版答案疑问