C++ 程序不';我不能正常工作

C++ 程序不';我不能正常工作,c++,function,C++,Function,所以我的程序应该是这样工作的: 输入整数n和m(例如n=1;m=10) 将从n到m的所有值(例如1;2;3;4;5;6;7;8;9;10)输入到动态数组中 然后,使用bool函数,您必须在动态数组中搜索2个数,这些数被平方并求和在一起,形成某种第三个数(例如1*1+1*1=2;2*2+2*2=8等) 出于某种原因,程序要么只输出第一个组合,要么根本不输出任何东西(例如,如果n=1和m=10,它只输出1*1+1*1=2,但它应该输出2*2+1*1=5;如果n=4和m=200,它甚至不输出任何东西)

所以我的程序应该是这样工作的:

  • 输入整数n和m(例如n=1;m=10)
  • 将从n到m的所有值(例如1;2;3;4;5;6;7;8;9;10)输入到动态数组中
  • 然后,使用bool函数,您必须在动态数组中搜索2个数,这些数被平方并求和在一起,形成某种第三个数(例如1*1+1*1=2;2*2+2*2=8等)
  • 出于某种原因,程序要么只输出第一个组合,要么根本不输出任何东西(例如,如果n=1和m=10,它只输出1*1+1*1=2,但它应该输出2*2+1*1=5;如果n=4和m=200,它甚至不输出任何东西)。问题出在哪里?我已经被困了好几个小时,在我看来,这个程序应该可以运行,但它不能。非常感谢

        #include <iostream>
    
    using namespace std;
    
    bool isSquared (int i){
       // bool result = false;
    
        //int div;
        //int *squares = new int [i];
    
        for (int j=1;j<=i;j++){
            for (int k=1;k<=i;k++){
                if (k*k + j*j == i) return true;
                else return false;
            }
        }
    }
    
    
    int main()
    {
        int n,m,i,size;
    
        cin >>n;
        cin >>m;
    
        size = m - n;
        int *real = new int [m - n];
    
        for (int q=0, j=n; q<size, j<=m; q++, j++){
            real[q] = j;
        }
    
        for (int q=0; q<=size; q++){
            cout <<real[q] <<" | ";
        }
    
        cout <<endl;
    
        for (int i=n; i<=m; i++){
            if (isSquared(i) == true){
                for (int j=0; j<=size; j++){
                    for (int k=0; k<=size; k++){
                        if (real[j]*real[j] + real[k]*real[k] == i){
                            cout <<i <<"=" <<real[j] <<"*" <<real[j] <<"+" <<real[k] <<"*" <<real[k] <<endl;
                        }
                    }
    
                }
    
    
            }
        }
    
        return 0;
    }
    
    #包括
    使用名称空间std;
    布尔·伊斯夸德(国际一级){
    //布尔结果=假;
    //国际部;
    //整数*平方=新整数[i];
    对于(int j=1;jn;
    cin>>m;
    尺寸=m-n;
    int*real=新的int[m-n];
    
    对于(intq=0,j=n;q,您需要花更多的时间分解任务的逻辑。您的措辞令人困惑,我认为这有助于您编写代码的方式

  • 输入整数n和m(例如n=1;m=10)
  • 将从n到m的所有值(例如1;2;3;4;5;6;7;8;9;10)输入到动态数组中
  • 然后,使用bool函数,您必须在动态数组中搜索2个数,这些数被平方并求和在一起,形成某种第三个数(例如1*1+1*1=2;2*2+2*2=8等)
  • 我认为您编写第1部分的方式(逻辑上)没有问题,但为了清楚起见,我将把它们重命名为
    start
    end

    //I'm also getting rid of superfluous variables we don't need.
    int start, end;
    
    cin >> start;
    cin >> end;
    
    第2部分是我们开始遇到问题的地方。对于初学者来说,手动管理动态内存使程序变得不必要的复杂。一个
    std::vector
    非常适合我们的任务(原因不止一个,您很快就会看到…)

    在您的代码版本中,这是令人困惑的:

    for (int q=0, j=n; q<size, j<=m; q++, j++){
        real[q] = j;
    }
    
    对于
    110
    的输入,我得到以下输出:

    1*1 + 1*1 = 2
    1*1 + 2*2 = 5
    2*2 + 2*2 = 8
    1*1 + 3*3 = 10
    
    4*4 + 4*4 = 32
    4*4 + 5*5 = 41
    5*5 + 5*5 = 50
    4*4 + 6*6 = 52
    5*5 + 6*6 = 61
    4*4 + 7*7 = 65
    6*6 + 6*6 = 72
    5*5 + 7*7 = 74
    4*4 + 8*8 = 80
    6*6 + 7*7 = 85
    5*5 + 8*8 = 89
    4*4 + 9*9 = 97
    7*7 + 7*7 = 98
    6*6 + 8*8 = 100
    5*5 + 9*9 = 106
    7*7 + 8*8 = 113
    4*4 + 10*10 = 116
    6*6 + 9*9 = 117
    5*5 + 10*10 = 125
    8*8 + 8*8 = 128
    7*7 + 9*9 = 130
    6*6 + 10*10 = 136
    4*4 + 11*11 = 137
    8*8 + 9*9 = 145
    5*5 + 11*11 = 146
    7*7 + 10*10 = 149
    6*6 + 11*11 = 157
    4*4 + 12*12 = 160
    9*9 + 9*9 = 162
    8*8 + 10*10 = 164
    5*5 + 12*12 = 169
    7*7 + 11*11 = 170
    6*6 + 12*12 = 180
    9*9 + 10*10 = 181
    4*4 + 13*13 = 185
    8*8 + 11*11 = 185
    7*7 + 12*12 = 193
    5*5 + 13*13 = 194
    10*10 + 10*10 = 200
    
    对于
    4200的输入,我得到以下输出:

    1*1 + 1*1 = 2
    1*1 + 2*2 = 5
    2*2 + 2*2 = 8
    1*1 + 3*3 = 10
    
    4*4 + 4*4 = 32
    4*4 + 5*5 = 41
    5*5 + 5*5 = 50
    4*4 + 6*6 = 52
    5*5 + 6*6 = 61
    4*4 + 7*7 = 65
    6*6 + 6*6 = 72
    5*5 + 7*7 = 74
    4*4 + 8*8 = 80
    6*6 + 7*7 = 85
    5*5 + 8*8 = 89
    4*4 + 9*9 = 97
    7*7 + 7*7 = 98
    6*6 + 8*8 = 100
    5*5 + 9*9 = 106
    7*7 + 8*8 = 113
    4*4 + 10*10 = 116
    6*6 + 9*9 = 117
    5*5 + 10*10 = 125
    8*8 + 8*8 = 128
    7*7 + 9*9 = 130
    6*6 + 10*10 = 136
    4*4 + 11*11 = 137
    8*8 + 9*9 = 145
    5*5 + 11*11 = 146
    7*7 + 10*10 = 149
    6*6 + 11*11 = 157
    4*4 + 12*12 = 160
    9*9 + 9*9 = 162
    8*8 + 10*10 = 164
    5*5 + 12*12 = 169
    7*7 + 11*11 = 170
    6*6 + 12*12 = 180
    9*9 + 10*10 = 181
    4*4 + 13*13 = 185
    8*8 + 11*11 = 185
    7*7 + 12*12 = 193
    5*5 + 13*13 = 194
    10*10 + 10*10 = 200
    

    解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现问题的示例,以及您在调试器中所做的观察。提示:
    (int k=1;k@drescherjm这就是问题所在,当函数得到第一次比较时,如何阻止它返回。@drescherjm我找到了一个修复程序,感谢您指出问题所在。@jcoe如果这解决了您的所有问题,请将其标记为已解决。
    
    4*4 + 4*4 = 32
    4*4 + 5*5 = 41
    5*5 + 5*5 = 50
    4*4 + 6*6 = 52
    5*5 + 6*6 = 61
    4*4 + 7*7 = 65
    6*6 + 6*6 = 72
    5*5 + 7*7 = 74
    4*4 + 8*8 = 80
    6*6 + 7*7 = 85
    5*5 + 8*8 = 89
    4*4 + 9*9 = 97
    7*7 + 7*7 = 98
    6*6 + 8*8 = 100
    5*5 + 9*9 = 106
    7*7 + 8*8 = 113
    4*4 + 10*10 = 116
    6*6 + 9*9 = 117
    5*5 + 10*10 = 125
    8*8 + 8*8 = 128
    7*7 + 9*9 = 130
    6*6 + 10*10 = 136
    4*4 + 11*11 = 137
    8*8 + 9*9 = 145
    5*5 + 11*11 = 146
    7*7 + 10*10 = 149
    6*6 + 11*11 = 157
    4*4 + 12*12 = 160
    9*9 + 9*9 = 162
    8*8 + 10*10 = 164
    5*5 + 12*12 = 169
    7*7 + 11*11 = 170
    6*6 + 12*12 = 180
    9*9 + 10*10 = 181
    4*4 + 13*13 = 185
    8*8 + 11*11 = 185
    7*7 + 12*12 = 193
    5*5 + 13*13 = 194
    10*10 + 10*10 = 200