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,它甚至不输出任何东西)
#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