以下是我的代码。它运行。有用。 问题是,第一个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位Fibonacci数位于索引11,斐波纳契数组为12长 前1000个数字Fibonacci数位于索引4781,斐波纳契数组为4782长
如您所见,控制案例与已知数据匹配。 [1,1,2,3,5,8,13,21,34,55,89,144] 数组中的最后一个数字是144.它位于索引11,但是是数组中的第12个数字。 同样的原则适用于较大的数字(它太大而无法粘贴)。它在数组的最后一个位置(4872)结束,其索引为4871。
为什么没有其他人注意到这一点?
答案 0 :(得分:5)
不,那不是错误。 项目Euler说:
&#xA;&#xA;&#xA ;&#xA;&#xA;因此,前12个术语将是:
&#xA; &#XA;F 1 = 1
&#xA;
&#xA; F 2 = 1
&#xA; F 3 = 2
&#xA; ...点击&#XA; F 11 = 89
&#xA; F 12 = 144
注意每个“F”右下角的小下标数字。 这些是索引。所以他们开始用1索引,因此“position”和“index”在这里是等价的。特别是,我们可以看到第一个带有三位数的Fibonacci数位于索引12处。
&#xA;&#xA;您选择的编程语言和数据类型以及该语言的索引选择不会t覆盖问题陈述中的内容。如果确实如此,则会出现问题,因为是编程语言,开始使用1进行索引。
&#xA;&#xA;在下面的评论中,您可以进行讨论关于“共同条款”以及它们“通常意味着什么”。我敢肯定你意识到Project Euler非常数学,而在数学方面,那些下标是索引。例如,参见数学中的索引符号。顺便说一下,所有这些例子开始用1(而不是0)索引,因为这也是数学中常见/通常的方式。
&#xA;