【发布时间】:2018-05-30 02:52:19
【问题描述】:
下面是我的代码。它运行。有用。 问题是,第一个 1000 位斐波那契数的 INDEX 不是 4872...它是 4871。4872 是 POSITION,而不是 INDEX。是欧拉接受了错误的答案,还是他们在应该使用位置时使用了索引这个词?
def fib_of_a_certain_digit(num)
fibs = [1, 1]
idx = 1
while true
fib = fibs[idx] + fibs[idx-1]
fibs << fib
idx += 1
digilength = fib.to_s.split("").length
return "The first #{num} digit Fibonacci number is at index #{idx}, the fibonacci array is #{fibs.length} long" if digilength == num
end
end
puts fib_of_a_certain_digit(3)
puts fib_of_a_certain_digit(1000)
这是输出。 第一个 3 位斐波那契数在索引 11 处,斐波那契数组长 12 第一个 1000 位斐波那契数在索引 4781 处,斐波那契数组长 4782
如您所见,控制用例与已知数据相匹配。 [1、1、2、3、5、8、13、21、34、55、89、144] 数组中的最后一个数字是 144。它位于索引 11 处,但却是数组中的第 12 个数字。 同样的原则也适用于更大的数字(它太大了,无法粘贴在这里)。它在数组的最后一个位置 (4872) 结束,索引为 4871。
为什么没有其他人注意到这一点?
【问题讨论】:
-
也许他们从 0 和 1 开始
-
在这种情况下,他们从 [1, 1] 开始。 projecteuler.net/problem=25 "因此前 12 个术语将是:F1 = 1 F2 = 1 等等"
-
也许他们暗示数组的索引基于 1 而不是基于 0 的索引?