【问题标题】:1000 Digit Fibonacci - Error on Euler?1000 位斐波那契 - 欧拉错误?
【发布时间】: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 的索引?

标签: ruby fibonacci


【解决方案1】:

不,这不是错误。 Project Euler says:

因此前 12 个术语将是:

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

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

您选择的编程语言和数据类型以及该语言对索引的选择不会覆盖问题陈述中的内容。如果是这样,就会出现问题,因为种编程语言以 1 开始索引。

在下面的 cmets 中,您将讨论“常用术语”及其“通常含义”。我相信你已经意识到 Project Euler 是非常数学化的,在数学中,那些下标就是索引。参见例如Index notation in mathematics。顺便说一句,所有那里的示例都以 1(而不是 0)开始索引,因为这也是数学中常见/常见的方式。

【讨论】:

  • 对不起,他们选择使用一个常见的编程术语,而不是在编码术语中通常意味着什么,这是我的错吗?
  • 他们的选择不是你的错。另外,请查看我刚刚添加的段落。
  • 我说他们的选择不是你的错。你确实错误地解释了他们的问题。如果您不同意,请在字典中查找“错误”和“错误”。你问错了,我只是说是你错了。
  • 就像我刚刚添加到答案中一样,这就是它在数学中的含义。这不是欧拉计划编造的一些不寻常的边缘事物。
  • @AaronGodhard 这不是一个完整的列表,但我认为它可以理解en.m.wikipedia.org/wiki/…
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多