根据“Fibonacci序列”找到答案

时间:2012-06-30 15:49:43

标签: java math arraylist fibonacci

请查看以下代码

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);
    }
}

在这里,我试图解决this问题,来自Project Euler,无论如何这都是问题。

  

Fibonacci序列中的每个新术语都是通过添加   前两个任期。从1和2开始,前10个术语将   是:

     

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

     

考虑Fibonacci序列中的值,而不是   超过四百万,找到偶数值的总和。

这是我得到的答案 - 257112;

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

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

2 个答案:

答案 0 :(得分:7)

  

考虑Fibonacci序列中的值,其值不超过四百万......

这里有一个问题:

if(thirdNumber>=400000)

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

答案 1 :(得分: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);