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 からこの問題を解決しようとしています。とにかく問題はここにあります。

フィボナッチ数列の新しい各項は、前の 2 つの項を追加することによって生成されます。1 と 2 から始めると、最初の 10 項は次のようになります。

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

値が 400 万を超えないフィボナッチ数列の項を考慮して、偶数値の項の合計を見つけます。

これが私が得た答えでした-257112;

それは答えが間違っていると言います。なぜだかわかりません。ちなみに私の母国語は英語ではありませんし、数学も英語でやったことがありません。だから私は質問を誤解したかどうか疑わしい.

これを解決する正しい方法を見つけるのを手伝ってください。ありがとう

4

2 に答える 2

7

値が400万を超えないフィボナッチ数列の項を考慮することによって...

1つの問題はここにあります:

if(thirdNumber>=400000)

それは400万ではありません。もう1つゼロが必要です。

于 2012-06-30T15:52:13.367 に答える
0

あなたはこれをもっと効率的にすることができます

  • フィボナッチ数を計算しながら合計を計算します(したがって、それらを保存する必要はありません)
  • コレクションを使用した場合は、文字列に変換して解析する代わりにジェネリックを使用します (これは驚くほど非効率的です)。
  • 3 つおきの値は偶数であるため、偶数をチェックする必要はありません。

試す

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 に答える