【问题标题】:True/False function if a sum exists如果总和存在,则为真/假函数
【发布时间】:2017-04-07 16:23:48
【问题描述】:

我希望有一个程序在存在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;
        }
    }

}

但是,此代码不会返回我想要的。我能做些什么来解决这个问题?

请大家在投反对票之前解释一下这个问题可以改进的地方。我注意到有时人们倾向于在没有任何解释的情况下对问题投反对票。

【问题讨论】:

  • 如果条件永远不成立怎么办?那你返回什么?
  • 第 1 步 - 使函数在所有代码路径中返回。步骤 #2 - 使用调试器。另外,c 是在哪里定义的?
  • 第 2 步 - 使用您的变量 n
  • 我不确定我是否知道在所有代码路径中返回什么。
  • a,b 正整数 n 隐含也需要是正整数

标签: c++ loops boolean


【解决方案1】:
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) 对使得 aa + bb = n*n。

【讨论】:

    【解决方案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");
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      相关资源
      最近更新 更多