【问题标题】:Sum of two squares decomposition counting两平方和分解计数
【发布时间】:2016-10-26 15:51:16
【问题描述】:

我想计算有多少对自然数使得a2 + b2 = c2。作为我函数的输入,我有c

我的想法是首先检查条件是否满足,如果不满足,我希望有一个循环迭代所需的表达式直到c。如果结果等于c 的平方,那么我想要count++。问题是为什么这不起作用?

添加了一些更正。

int sum(int c) {
    int b=1;
    int a=1;
    int count=0;
    int result;

    if (a*a + b*b != c*c)
    {
        for (int i=1; i<=c; i++)
        {
            b=i;
            result = a*a + b*b;
            if (result == c*c)
                count++;
        }
        a++;
    }
    else
        count++;

    return count;
}

问题是我仍然不明白为什么这不起作用。

我的第二个想法是使用 while 循环来处理它:

int sum(int c) {
    int b=1;
    int a=1;
    int count=0;
    int result;

    if (a*a + b*b != c*c)
    {
        while(b<=c)
        {
            result = a*a + b*b;
            if (result == c*c)
                {count++;
                b++;
                }
                else
                    b++;
        }
        a++;
    }
    else
        count++;

    return count;
}

也不能正常工作。

有人知道如何让它工作吗?这两个版本中的任何一个?也许是提示?

【问题讨论】:

  • 既然您从未将a 的值从1 更改为a*a,为什么还要浪费时间?
  • 您可以使用 debugger 解决此问题 - 逐步执行代码,查看变量,完成后您将了解一切是如何工作的。
  • 请将内容存储在变量中。 aSquared = a * a; bSquared = b * b; cSquared = c*c; if(aSquared + bSquared != cSquared),可读性也会对其他人有所帮助.....
  • 而且你的计数没有初始化为 0,所以当你计数++时它在做垃圾++

标签: c++ c loops if-statement for-loop


【解决方案1】:

问题是您正在使用 if 期望它像循环一样工作。在if 的底部,您将递增a,但是因为它是if 而不是whilefor,它不会跳回顶部。

ab 都需要改变,所以你需要一个循环来控制每一个。

for (a=1; a<=c; a++) {
    for (b=a; b<=c; b++) {
        if (a*a + b*b == c*c) {
            count++;
        }
    }
}

请注意,ba 的当前值而不是 1 开始。这样,您不会尝试两次相同的数字对(只是切换)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多