【问题标题】:Project Euler N2 - Fibonacci algorithm isnt working properlyProject Euler N2 - 斐波那契算法无法正常工作
【发布时间】:2010-11-26 00:38:11
【问题描述】:

斐波那契的每个新术语 序列是通过添加 前两期。从 1 开始 和 2,前 10 个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

求所有偶值的总和 序列中的项不 超过四百万。

        Int64[] Numeros = new Int64[4000005];
        Numeros[0] = 1;
        Numeros[1] = 2;

        Int64 Indice = 2;
        Int64 Acumulador = 2;

        for (int i = 0; i < 4000000; i++)
        {
            Numeros[Indice] = Numeros[Indice - 2] + Numeros[Indice - 1];

            if (Numeros[Indice] % 2 == 0)
            {
                if ((Numeros[Indice] + Acumulador) > 4000000)
                {
                    break;
                }
                else
                {
                    Acumulador += Numeros[Indice];
                }
            }

            Indice++;
        }

        Console.WriteLine(Acumulador);
        Console.ReadLine();

我的程序没有按我猜的那样运行,因为在 Project Euler 上,他们说我的答案不正确。也许我忽略了一些东西。有什么帮助吗?

【问题讨论】:

  • 首先,您只需要跟踪最后两个数字。
  • 在检查数字是否为偶数之前先检查上限。

标签: algorithm fibonacci


【解决方案1】:

这一行

if ((Numeros[Indice] + Acumulador) > 4000000)

正在检查总和是否大于 4MM。您需要检查项 (Numeros[Indice]) 是否大于 4MM。所以把它改成这个......

if (Numeros[Indice] > 4000000)

可能是一个不错的起点。

【讨论】:

    【解决方案2】:

    而且你在 for 循环中的测试条件也是无用的。i 永远不会达到 4000000 的值。 只是一个

    while(1){
    //code
    }
    

    也可以,不需要i,因为你从不使用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2013-03-31
      相关资源
      最近更新 更多