水中有明月 发表于 2023-12-19 17:45:31

数麦子

作业中的小麦计算,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


FishC 发表于 2023-12-19 17:45:38

i = 1
s = 1

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

print("一共有" + str(s) + "个小麦")

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

水中有明月 发表于 2023-12-19 17:47:24

FishC 发表于 2023-12-19 17:45
i = 1
s = 1


@FishC 我想问我的代码哪里不正确,为什么不能得到正确的值?

FishC 发表于 2023-12-19 17:47:33

水中有明月 发表于 2023-12-19 17:47
@FishC 我想问我的代码哪里不正确,为什么不能得到正 ...

嗨!我很乐意帮助你找出代码中的问题。请描述一下你的代码是做什么的,然后告诉我你遇到了什么问题。这样我就能更好地帮助你啦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-19 18:53:29

你的代码逻辑是存在错误的。

在你的代码中,`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:}

水中有明月 发表于 2023-12-19 19:05:57

sfqxx 发表于 2023-12-19 18:53
你的代码逻辑是存在错误的。

在你的代码中,`rice = rice + rice * 2` 这一行,其实相当于每次都是 `ric ...

鸡哥你好,你这个算法只算了最后一个格子的麦子,没有加上前面格子的

sfqxx 发表于 2023-12-19 19:21:00

水中有明月 发表于 2023-12-19 19:05
鸡哥你好,你这个算法只算了最后一个格子的麦子,没有加上前面格子的

OK
我改一下

sfqxx 发表于 2023-12-19 19:23:53

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:24:51

本帖最后由 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=' ')

求最佳答案

水中有明月 发表于 2023-12-19 19:41:12

sfqxx 发表于 2023-12-19 19:24
求最佳答案

你这是另起一个式子,我想问问我那个式子在逻辑上哪里错了

sfqxx 发表于 2023-12-19 19:57:48

水中有明月 发表于 2023-12-19 19:41
你这是另起一个式子,我想问问我那个式子在逻辑上哪里错了

在你的代码中,`rice = rice + rice * 2` 这一行,其实相当于每次都是 `rice = rice * 3` ,也就是说每次的麦子数量都是之前的3倍,这显然是错误的。原题是每个格子的麦子数目是上一个格子的2倍,而你的逻辑是每个格子的麦子数目是上一个格子的3倍。
页: [1]
查看完整版本: 数麦子