我正在尝试解决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的正确答案,但我的答案没有被接受。请帮帮我,我无法理解出了什么问题。
答案 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)