确定给定数量的毕达哥拉斯三元组

时间:2013-09-10 20:17:46

标签: c pythagorean

所以学校已经开始,我的编码有点生疏,我去了我的教授,据他说我很亲近,我相信我更接近,但我被卡住了。

该作业主要是为了让我们了解如何在linux中使用“Vi”,并附带一个小编码,因此我们可以在Vi中编码。

这是我们需要做的,向用户询问正数,一旦给出正数,我们需要确定所有可能达到给定数字的数字的毕达哥拉斯三元组。

到目前为止,这就是我所拥有的......

#include <stdio.h>

int main(void)
{

    int x = 0, y = 0, z = 0, n;
    int count = 0;

    printf("Please Enter A Positive Integer: \n");
    scanf("%d", &n);

    while (z <= n)
    {
        while (y < z)
        {
            while (x < y)
            {
                if (x * x + y * y == z * z)
                {
                    printf("%d: \t%d %d %d\n", ++count, x, y, z);
                }
                x += 1;
            }
            y += 1;
        }
        z += 1;
    }

现在,如果我输入任何5或更高的数字,我会得到一个正确的三联“3 4 5”

Please Enter A Positive Integer: 25
1:  3 4 5

但无论我走得多高,这都是我得到的任何提示?

3 个答案:

答案 0 :(得分:1)

您需要在每个循环期间重置x和y的值:)。你拥有的大致是这样的:

for(z = 0; z <=n; z++)
    for(; y < z; y++)
        for(; x < y; x++)

相反,您需要在每次到达循环时重置x和y,所以:

while(z <= n) {
    y = 0;
    while(y < z) {
        x = 0;
        //...

答案 1 :(得分:1)

在外部循环的后续迭代中,您没有将xy重置为0。您可能需要考虑for循环而不是while循环。

for (z = 0; z <= n; z++)
{
    for (y = 0; y < z; y++)
    {
        for (x = 0; x < y; x++)
        {
            if (x * x + y * y == z * z)
            {
                printf("%d: \t%d %d %d\n", ++count, x, y, z);
            }
        }
    }
}

答案 2 :(得分:1)

做一点调试。在你的毕达哥拉斯测试中添加一个else子句,看看你实际测试的是什么值;

if (x * x + y * y == z *  {
    printf("%d: \t%d %d %d\n", ++count, x, y, z);
} else {
    printf("NOT PYTH: %d: \t%d %d %d\n", ++count, x, y, z);
}

这会引导您解决问题。