1000 Digit Fibonacci - Euler出错?

时间:2017-12-15 21:27:29

标签: ruby fibonacci

以下是我的代码。它运行。有用。 问题是,第一个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。

为什么没有其他人注意到这一点?

1 个答案:

答案 0 :(得分:5)

不,那不是错误。 项目Euler说

&#xA;&#xA;
&#xA ;

因此,前12个术语将是:

&#xA; &#XA;

F 1 = 1
&#xA; F 2 = 1
&#xA; F 3 = 2
&#xA; ...点击&#XA; F 11 = 89
&#xA; F 12 = 144

&#xA;
&#xA;&#xA;

注意每个“F”右下角的小下标数字。 这些是索引。所以他们开始用1索引,因此“position”和“index”在这里是等价的。特别是,我们可以看到第一个带有三位数的Fibonacci数位于索引12处。

&#xA;&#xA;

您选择的编程语言和数据类型以及该语言的索引选择不会t覆盖问题陈述中的内容。如果确实如此,则会出现问题,因为编程语言,开始使用1进行索引。

&#xA;&#xA;

在下面的评论中,您可以进行讨论关于“共同条款”以及它们“通常意味着什么”。我敢肯定你意识到Project Euler非常数学,而在数学方面,那些下标是索引。例如,参见数学中的索引符号。顺便说一下,所有这些例子开始用1(而不是0)索引,因为这也是数学中常见/通常的方式。

&#xA;