1000 Digit Fibonacci - Euler出错?

问题描述 投票:-2回答:1

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

这是输出。前三位Fibonacci数位于索引11,斐波纳契数组为12长。前1000位斐波纳契数位于索引4781,斐波那契数组为4782长

如您所见,控制案例与已知数据匹配。 [1,1,2,3,5,8,13,21,34,55,89,144]数组中的最后一个数字是144.它在索引11处,但是是数组中的第12个数字。同样的原则适用于较大的数字(它太大而无法粘贴)。它在阵列的最后一个位置(4872)结束,其索引为4871。

为什么没有人注意到这个?

ruby fibonacci
1个回答
5
投票

不,那不是错误。 Project Euler says

因此,前12个学期将是:

F1 = 1 F2 = 1 F3 = 2 ... F11 = 89 F12 = 144

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

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

在下面的评论中,您将讨论“常用术语”以及它们“通常意味着什么”。我敢肯定你意识到Project Euler非常数学,而在数学方面,那些下标是索引。例如,参见Index notation in mathematics。顺便说一句,那里的所有例子都开始用1(而不是0)索引,因为这也是数学中常见的/通常的方式。

© www.soinside.com 2019 - 2024. All rights reserved.