我想在存在这样的正整数a
和b
时返回true的程序,使得a*a+b*b=n*n
。
我的代码是:
bool c(int n){
int b=1;
int a=1;
for (a=1; a<=n; a++) {
for (b=a; b<=n; b++) {
if (a*a + b*b == n*n) {
return true;
else
return false;
}
}
}
但是,此代码不会返回我想要的内容。我该怎么办才能解决?
请所有人在投票之前,请说明这个问题可以改善的。我已经注意到,有时人们倾向于在没有任何解释的情况下放弃投票问题。
您的程序不编译。您可能打算写这个:
bool c(int n) {
int b = 1;
int a = 1;
for (a = 1; a <= n; a++) {
for (b = a; b <= n; b++) {
if (a*a + b*b == n*n)
return true;
else
return false;
}
}
}
哪个编译,但这是错误的。
,但您可能想要这个:
bool myfunction(int n) {
int b = 1;
int a = 1;
for (a = 1; a <= n; a++) {
for (b = a; b <= n; b++) {
if (a*a + b*b == n*n)
return true;
}
}
return false;
}
int main() {
if (myfunction(5)) {
printf("myfunction(5) returned truen");
}
}
bool c(int n){
int b=1;
int a=1;
for (a=1; a<=n; a++) {
for (b=a; b<=n; b++) {
if (a*a + b*b == n*n) {
return true;
else
return false;
}
}
}
您编写的代码将检查A = 1和B = 1,并且评估为1 1等于2。
因此,您的代码所做的一切只是比较2至n。
return false
语句应在两个for循环之外。这意味着,对于A和B的所有组合,都没有一对(A,B),因此A a b b = n*n。