【问题标题】:C++ x doesnt loop increamentC++ x 不循环递增
【发布时间】:2016-10-09 06:13:58
【问题描述】:

我的老师有一个任务,比如: x^2 + y^3 = z

x 只填充奇数 y 只填充偶数

#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";
            }
         }
      }
   }
}

我尝试像上面那样编写自己的代码,但唯一的一个循环是 Y ,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

附言。我很抱歉我的英语不好:D

【问题讨论】:

  • 除了严重的缩进之外,您应该使用 调试器 来解决这个问题。使用调试器,您可以逐行单步执行代码,同时监控变量及其值。
  • @JoachimPileborg: y 具有静态存储持续时间,因此初始化为零。
  • @BenjaminLindley 是的,刚刚看到了。
  • @JoachimPileborg 那么我应该去扫描“IF-STATEMENT”之后的第一个变量吗?但我不知道应该用什么来扫描 C++ 上的变量
  • @FahmyArsyaad 解决此类问题的正确工具是您的调试器。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。

标签: c++ loops if-statement for-loop cout


【解决方案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)&amp;&amp;(y%2==0)){检查。

内部for循环完成后,y的值将是21。因此,无论x的值是多少,上述条件的计算结果都是false。因此,内部 for 循环只执行一次。您需要删除第一个 if 语句。

int main(){
   for (x=1;x<=20;x++){
      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";
         }
      }
   }
}

更新,以回应 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";
   }
}

【讨论】:

  • 我刚刚尝试了您的解决方案,但它导致输出过多。我想要的是:1^2 + 3^3 = 9 3^2 + 4^3 = 71 等
  • x 用奇数填充,y 用偶数填充,直到 20 次迭代。就像最终的输出是 19^2 + 20^ = 8361
  • @FahmyArsyaad,1^2 + 4^3 = 65 呢?你不想看到吗?
  • 非常感谢我的朋友 :") 终于解决了 :"))) 对不起我的愚蠢问题并且(可能)强迫你
  • @FahmyArsyaad,不客气。我很高兴能够提供帮助。
【解决方案2】:

因为y=21在y循环之后。所以x循环不会在y之后执行。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多