0

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

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

400 万を超えない数列のすべての偶数項の合計を求めます。

        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で私の答えが間違っていると言われているため、私のプログラムは本来あるべきように機能していません。多分私は何かを見落としています。何か助けはありますか?

4

2 に答える 2

2

この行

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

合計が 4MM を超えているかどうかをチェックしています。項 (Numeros[Indice]) が 4MM より大きいことを確認する必要があります。それでこれに変えて…

if (Numeros[Indice] > 4000000)

おそらく開始するのに適した場所です。

于 2009-09-06T14:30:49.360 に答える
0

また、 for ループのテスト条件は役に立たない.. i4000000の値に達することはありません。

while(1){
//code
}

iまた、使用しないので必要ありません

于 2009-09-06T14:35:09.960 に答える