0

请看下面的代码

package Euler;

import java.util.ArrayList;
import java.util.List;

public class Problem2
{
    public static void main(String[]args)
    {
        int firstNumber=1;
        int secondNumber=2;
        int thirdNumber = 0;

        int sum = 0;

        List array = new ArrayList();

        while(true)
        {

            if(thirdNumber>=400000)
            {
                break;
            }
            else
            {
                thirdNumber = firstNumber+secondNumber;
                System.out.println(thirdNumber);


                 if(thirdNumber%2==0)
                {
                    array.add(thirdNumber);
                }

                firstNumber = secondNumber;
                secondNumber = thirdNumber;
            }
        }

        for( int i=0;i<array.size();i++)
        {
            int num = Integer.parseInt(array.get(i).toString());

            sum = sum+num;
        }

        System.out.println("The Sum is: "+sum);
    }
}

在这里,我试图从 Project Euler 解决这个问题,无论如何,这就是问题所在。

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:

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

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

这就是我得到的答案——257112;

它说答案是错误的。我不知道为什么会这样。供您参考,我的母语不是英语,我也没有用英语做数学。所以我怀疑我是否误解了这个问题。

请帮助我找到解决此问题的正确方法。谢谢

4

2 回答 2

7

通过考虑斐波那契数列中其值不超过四百万的项...

这里有一个问题:

if(thirdNumber>=400000)

那不是四百万。你还需要一个零。

于 2012-06-30T15:52:13.367 回答
0

您可以通过以下方式提高效率

  • 在计算斐波那契数时计算总和(因此您不必存储它们)
  • 如果您确实使用了集合,请使用泛型而不是转换为字符串并解析它(这非常低效)
  • 请注意,每三个值都是偶数,因此您不需要检查偶数。

尝试

long a = 1, b = 1, c, sum = 0;
while ((c = a + b) < 4000000) {
    sum += c;
    a = b + c;
    b = c + a;
}
System.out.println(sum);
于 2012-07-01T09:29:26.333 回答