项目欧拉#25 Python为什么这不起作用?

时间:2013-12-27 16:17:22

标签: python

我正在尝试解决this problem

  

第12个学期,F 12 ,是第一个包含三位数的术语。

     

Fibonacci序列中第一个包含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的正确答案,但我的答案没有被接受。请帮帮我,我无法理解出了什么问题。

3 个答案:

答案 0 :(得分:1)

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

因此,如果F n 是Fibonacci序列中包含1000位数的第一项,则需要输入相应的n。

答案 1 :(得分:1)

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

  

Fibonacci序列中包含3位数的第一项是什么?

答案是12,而不是144。

Project Euler的一般提示:仔细阅读问题描述。并且至少做3次。如果我每分钟烧掉一卡路里,我就会因为误读问题文本而解决PE问题,我的身体可能会健康。

答案 2 :(得分: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)