数麦子
作业中的小麦计算,1-64格子,第一个格放一个,后续翻倍,一共多少个?标答是:
i = 1
s = 0
while i <= 64:
wheats = pow(2, i-1)
s = s + wheats
i = i + 1
print("舍罕王应该给达依尔", s, "粒麦子!")
返回:舍罕王应该给达依尔 18446744073709551615 粒麦子!
我的答案是:
#计算舍罕王应该给达依尔多少粒麦子?
rice = 1
i = 2
while i <= 64:
rice = rice + rice * 2
i = i + 1
print('舍罕王应该给达依尔',rice,'粒麦子!', sep=' ')
返回:舍罕王应该给达依尔 1144561273430837494885949696427 粒麦子!
我感觉自己的逻辑应该没有问题啊?到底哪里出错了@FishC
i = 1
s = 1
while i < 64:
s *= 2
i += 1
print("一共有" + str(s) + "个小麦")
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-19 17:45
i = 1
s = 1
@FishC 我想问我的代码哪里不正确,为什么不能得到正确的值?
水中有明月 发表于 2023-12-19 17:47
@FishC 我想问我的代码哪里不正确,为什么不能得到正 ...
嗨!我很乐意帮助你找出代码中的问题。请描述一下你的代码是做什么的,然后告诉我你遇到了什么问题。这样我就能更好地帮助你啦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 你的代码逻辑是存在错误的。
在你的代码中,`rice = rice + rice * 2` 这一行,其实相当于每次都是 `rice = rice * 3` ,也就是说每次的麦子数量都是之前的3倍,这显然是错误的。原题是每个格子的麦子数目是上一个格子的2倍,而你的逻辑是每个格子的麦子数目是上一个格子的3倍。
正确的应该是 `rice = rice * 2`,也就是说:上一个格子有多少麦子,那么下一个格子就有上一个格子麦子的两倍。即每次麦子的数量都是之前的2倍,而并非你写的3倍。
代码:
#计算舍罕王应该给达依尔多少粒麦子?
rice = 1
i = 2
while i <= 64:
rice = rice * 2
i = i + 1
print('舍罕王应该给达依尔', rice-1, '粒麦子!', sep=' ')
求最佳答案{:10_254:} sfqxx 发表于 2023-12-19 18:53
你的代码逻辑是存在错误的。
在你的代码中,`rice = rice + rice * 2` 这一行,其实相当于每次都是 `ric ...
鸡哥你好,你这个算法只算了最后一个格子的麦子,没有加上前面格子的 水中有明月 发表于 2023-12-19 19:05
鸡哥你好,你这个算法只算了最后一个格子的麦子,没有加上前面格子的
OK
我改一下 sfqxx 发表于 2023-12-19 19:21
OK
我改一下
#计算舍罕王应该给达依尔多少粒麦子?
rice = 1
i = 2
ans = 0
while i <= 64:
rice = rice * 2
ans+=rice
i = i + 1
print('舍罕王应该给达依尔', ans, '粒麦子!', sep=' ') 本帖最后由 sfqxx 于 2023-12-19 19:25 编辑
水中有明月 发表于 2023-12-19 19:05
鸡哥你好,你这个算法只算了最后一个格子的麦子,没有加上前面格子的
#计算舍罕王应该给达依尔多少粒麦子?
rice = 1
i = 2
ans = 1
while i <= 64:
rice = rice * 2
ans+=rice
i = i + 1
print('舍罕王应该给达依尔', ans, '粒麦子!', sep=' ')
求最佳答案 sfqxx 发表于 2023-12-19 19:24
求最佳答案
你这是另起一个式子,我想问问我那个式子在逻辑上哪里错了 水中有明月 发表于 2023-12-19 19:41
你这是另起一个式子,我想问问我那个式子在逻辑上哪里错了
在你的代码中,`rice = rice + rice * 2` 这一行,其实相当于每次都是 `rice = rice * 3` ,也就是说每次的麦子数量都是之前的3倍,这显然是错误的。原题是每个格子的麦子数目是上一个格子的2倍,而你的逻辑是每个格子的麦子数目是上一个格子的3倍。
页:
[1]