以下是我的代码.它运行.有用.问题是,第一个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)
Run Code Online (Sandbox Code Playgroud)
这是输出.前三位Fibonacci数位于索引11,斐波纳契数组为12长.前1000位斐波纳契数位于索引4781,斐波那契数组为4782长
如您所见,控制案例与已知数据匹配.[1,1,2,3,5,8,13,21,34,55,89,144]数组中的最后一个数字是144.它在索引11处,但是是数组中的第12个数字.同样的原则适用于较大的数字(它太大而无法粘贴).它在阵列的最后一个位置(4872)结束,其索引为4871.
为什么没有人注意到这个?
不,那不是错误.欧拉项目说:
因此,前12个学期将是:
F 1 = 1
F 2 = 1
F 3 = 2
...
F 11 = 89
F 12 = 144
注意每个"F"右下角的小下标数字.这些是索引.所以他们开始用1索引,因此"位置"和"索引"在这里是等价的.特别是,我们可以看到第一个三位数的斐波纳契数是在索引12处.
您选择的编程语言和数据类型以及该语言的索引选择不会覆盖问题陈述中的内容.如果它没有,有会是一个问题,因为在编程与1开始索引的语言.
在下面的评论中,您将讨论"常用术语"以及它们"通常意味着什么".我敢肯定你意识到Project Euler非常数学,而在数学方面,那些下标是索引.参见例如数学中的索引表示法.顺便说一句,那里的所有例子都开始用1(而不是0)索引,因为这也是数学中常见的/通常的方式.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |