2016-10-09 6 views
-1

Iは次のように、先生からタスクを持っている。のみ奇数 Yで満たさ X^2 + y^3 = ZC++ X doesntのループincreament

xが偶数

#include <stdio.h> 
#include <string> 
#include <iostream> 

using namespace std; 
int x,y,z; 

int main(){ 
    for (x=1;x<=20;x++){ 
     if ((x%2==1)&&(y%2==0)){ 
     for (y=1;y<=20;y++){ 
      if ((x%2==1)&&(y%2==0)){ 
       z = (x*x) + (y*y*y); 
       cout << "x^2 + y^3 =" <<z <<"\n"; 
      } 
     } 
     } 
    } 
} 

のみ充填しました私は上記のように自分のコードを作ろうとしますが、ループは1つしかありません。xは1のままです。

私はxもループしたいと思っています。私は何をすべきか?

1^2 + 2^3 = 9 
3^2 + 4^3 = 71 
5^2 + 6^3 = 241 
7^2 + 8^3 = 561 
9^2 + 10^3 = 1081 
11^2 + 12^3 = 1849 
13^2 + 14^3 = 2913 
15^2 + 16^3 = 4321 
17^2 + 18^3 = 6121 
19^2 + 20^3 = 8361 

PS:

マイ出力期待は次のようになります。私の悪い英語で申し訳ありませんイム:D

+1

残念な字下げのほかに、*デバッガ*を使ってこれを解決する必要があります。デバッガを使用すると、変数とその値を監視しながら、コードを1行ずつステップ実行できます。 –

+0

@ JoachimPileborg: 'y'は静的な記憶期間を持っているので、ゼロに初期化されます。 –

+0

@BenjaminLindleyちょうどそれを見た。 –

答えて

1

これは、あなたが持っているものです。

int main(){ 
    for (x=1;x<=20;x++){ 
     if ((x%2==1)&&(y%2==0)){ 
     for (y=1;y<=20;y++){ 
      if ((x%2==1)&&(y%2==0)){ 
       z = (x*x) + (y*y*y); 
       cout << "x^2 + y^3 =" <<z <<"\n"; 
      } 
     } 
     } 
    } 
} 

問題は最初if ((x%2==1)&&(y%2==0)){チェックです。

内部ループが完了した後、yの値は21になります。したがって、xの値に関係なく、上記の条件はfalseと評価されます。結果として、内部forループは1回だけ実行されます。その最初のifステートメントを削除する必要があります。あなたがはるかに簡単なコードを必要とするよう

​​

アップデートは、OPのコメントに反応して

が見えます。

int main(){ 

    // Start with x = 1 and increment x by 2. It will be always be odd 
    for (x = 1; x <= 20; x += 2){ 

     // No need to create another loop. y is simply x+1 
     // Since x is odd, y will be even. 
     y = x+1; 

     // Compute the result and print it. 
     z = (x*x) + (y*y*y); 
     cout << "x^2 + y^3 =" << z <<"\n"; 
    } 
} 
+0

私はちょうどソリューションを試しましたが、出力が多すぎます。私が欲しいのは次のようなものです: 1^2 + 3^3 = 9 3^2 + 4^3 = 71 など –

+0

xは奇数で満たされ、yは20回の繰り返しまで満たされます。最終出力が19^2 + 20^= 8361 –

+0

@ FahmyArsyaadのように、 '1^2 + 4^3 = 65'はどうでしょうか?それを見たくないですか? –

0

内部yループの後にy = 21なので、xループは実行されません。それが役に立つと願っています。