-1

問題:

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

1、2、3、5、8、13、21、34、55、89、..。

値が400万を超えないフィボナッチ数列の項を検討することにより、偶数値の項の合計を求めます。

これを行う別の方法を調べましたが、なぜ私の方法が機能しないのか混乱しています。コードとその下に書かれたアルゴリズムプロセスを含めました。選択した値kの反復のスパン(4000000または10)に関係なく、常に同じ答え(4200784)を受け取ります。助けてくれてありがとう。

#include <stdio.h>

int main()
{
long int sum;
sum = 0;
long int i;
i = 1;
long int j;
j = 2;
long int k;

while(k<4000000)
{   
    k = i + j;
    if(k%2==0)
        sum +=k;
    i = j;
    j = k;
    
}
printf("%d",sum);
return 0;
}

//Step 0//For the initial conditions [i][j]=[1][2]
//Step 1//Find the value of i + j.
//Step 2//Find out if the solution is even by dividing by modulus 2.
//Step 3//If even, add the solution to the sum.
//Step 4//Replace the value of i with j, and replace the value of j with the new sum.
//Repeat Steps 1-4 while i + j < 4,000,000
//1, 2, 3, 5, 8, 13, 21, 34
4

2 に答える 2

3

私はあなたが探していると信じています

sum += k;

いいえ

k+=sum;

また、これを修正して、whileループ内に配置する必要があります

k = i + j;

注:合計を0に初期化する必要もあります

于 2013-03-16T23:32:26.573 に答える
1

'k'変数を初期化することはありません。その最初の「while」テストでは、「k」の値が未定義であるため、すべての賭けがオフになります。

于 2013-03-17T00:19:57.723 に答える