我希望有一个程序在存在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;
}
}
}
但是这段代码没有返回我想要的内容。我该怎么做才能解决这个问题?
请大家在投票前请说明在这个问题上可以改进的内容。我注意到有时人们倾向于在没有任何解释的情况下投票。
答案 0 :(得分:2)
您的程序无法编译。你可能想写这个:
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 true\n");
}
}
答案 1 :(得分:2)
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 + b b = n * n。