【问题标题】:Project Euler #25 Python Why this wont work?Project Euler #25 Python 为什么这不起作用?
【发布时间】:2013-12-27 16:17:21
【问题描述】:

我正在尝试解决this problem

第 12 项 F12 是第一个包含三位数字的项。

斐波那契数列中包含 1000 的第一项是什么 数字?

check = True
mylst = [1,1]
i = 1
while check:
    if  len(str(mylst[i])) >= 1000:
        check = False
    else:
        mylst.append(mylst[i-1] + mylst[i-2])  
        i=i+1
a =str((mylst[len(mylst)-1]))
print(len(a))
print(a)

我似乎得到了测试用例 2 和 3 的正确答案,但我的答案未被接受。请帮助我,我无法理解出了什么问题。

【问题讨论】:

  • 请在您的帖子中包含完整的问题(什么是 Project Euler #25?)。如果人们不必去外部网站自行查找,您就更有可能得到答案。
  • @MohammadS。不,这是同一个练习,但问题不同。

标签: python


【解决方案1】:

我认为您的代码有错误。如果您查看第一次迭代,则从 i=1 开始,然后调用

mylst.append(mylst[i-1] + mylst[i-2])  

这将添加mylst[0] + mylst[-1]。这也给了我不正确的答案(用于查找第一个 3 位数的索引,F12。您的代码给了我 F18)。

显然这不是你想要做的。您可以通过更改要添加在一起的列表索引来修复它。

check = True
mylst = [1,1]
i = 1
while check:
    if  len(str(mylst[i])) >= 1000:
        check = False
    else:
        mylst.append(mylst[i] + mylst[i-1])  
        i=i+1

然后,正如其他人所提到的,您需要答案的索引。

print len(mylst)

【讨论】:

    【解决方案2】:

    答案是斐波那契数的索引,而不是数字本身。

    因此,如果 Fn 是斐波那契数列中包含 1000 位数字的第一项,则需要输入相应的 n。

    【讨论】:

    • 无论如何,他的代码都没有给出正确的答案。如果将1000 替换为3,它将给出索引18,而不是12。
    • 你是对的,他也因为一个错误的错误而错误地生成了数字
    【解决方案3】:

    因为问题是第一个包含 1000 位数字的术语是什么,而不是哪个数字。所以,如果问题是

    斐波那契数列中包含 3 位数字的第一项是什么?

    答案应该是 12,而不是 144。

    关于 Project Euler 的一般提示:仔细阅读问题描述。并且至少做 3 次。如果我因为误读问题文本而花费在解决体育问题上的每一分钟消耗一卡路里,那么我的身体可能会处于健康状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2016-09-12
      • 2012-09-18
      • 1970-01-01
      • 2022-01-21
      • 2013-08-11
      相关资源
      最近更新 更多