如果存在总和,则为真/假功能

时间:2016-11-23 15:21:54

标签: c++ loops boolean

我希望有一个程序在存在ab这样的正整数时返回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;
        }
    }

}

但是这段代码没有返回我想要的内容。我该怎么做才能解决这个问题?

请大家在投票前请说明在这个问题上可以改进的内容。我注意到有时人们倾向于在没有任何解释的情况下投票。

2 个答案:

答案 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。