2017-11-05 5 views
-4

私はコーディングをして、C++に乗ろうとしています。私はProject Eulerの2番目の問題を解決しようとしていました。私はそれにアプローチする方法についてよく理解していたと思いました。数時間後、私はあきらめて、それを調べることに決めました。持つコードの小さなビットを説明する助けが必要です

int x = 0; 
int y = 1; 
int z = x + y; 
int sumeven = 0; 
while (z < 4000000) 
{ 
    x = y; 
    y = z; 
    z = x + y; 
    if (z % 2 == 0) 
    { 
     sumeven += z; 
    } 
} 
cout << sumeven; 

THRの問題イムは、私は理解して他の

x=y; y=z; z=x+y; 

すべてです。

誰かが私にこのことを説明できますか。どのように私はそれを見てせずにこれを行うことが知られていたかわからないです。

+2

:[フィボナッチ数列の各新しい用語が前の二つの用語を追加することによって生成される。](https://projecteuler.net/pr私たちは、新しいZを計算しますoblem = 2)。この策定が混乱している場合は、これをコード化する他の方法があるので、他のフィボナッチの実装を見てください。 – jdigital

+0

割り当ては何ですか? –

+0

あなたの質問は広すぎます。 C++言語仕様の重要な部分を占めるに至っています。あなたは変数が何であるか知っていますか?変数の割り当ては何ですか?整数が何であるか知っていますか?オペレーターが何であるか知っていますか? 2つの整数の '演算子+'が何をするのか知っていますか? –

答えて

0

Zは、常に前の2つの数字の合計に設定されています。ここで、xは「2つ前の数字」で、yは「前の数字」です。

したがって、zが計算された後、次の反復を設定する必要があります。我々は今、この繰り返しでyをされていたものであることを「2つの数字前に」欲しい:

x = y; 

そして、私たちはちょうど計算したzように「前の番号を」欲しい:今

y = z; 

をそれは、問題文で右説明しています

z = x + y; 
0

この例では、フィボナッチ数列の偶数を計算しようとします。フィボナッチ数列の各数値は、最後の2つの数値を加算した結果です。だからここに何が起こっているかである:0から

  1. スタート:int x = 0; \\x is 0 now
  2. 秒数は1である:int y = 1; \\y is 1 now
  3. 3D番号を取得するためにそれらを追加します:xint z = x + y; \\z is 1 now as it's result of adding 0 and 1
  4. コピーyを:x = y; \\so x is 1 now, as you can see we are advancing our variables in Fibonacci sequence, It means x is the second number of sequence now
  5. コピーzyy = z; \\as I said, we are advancing in sequence so now y is 3d element of sequence (it was 2nd before) and it's value is 1 now
  6. 計算式最後の二つの要素(xy)のベース:それは私たちの集計変数に追加し、ある場合if (z % 2 == 0)
  7. z = x + y; \\ so here z would be our 4th element which of course it's calculated by last two so it's value would be 2 as x and y were both 1
  8. テストそれが偶数かどうsumeven += z;
  9. ゴー4
をステップ
関連する問題