两个正方形分解计数的总和

时间:2016-10-26 15:51:16

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

我想计算有多少对自然数,使得 2 + b 2 = c 2 。作为我的函数的输入,我有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;
}

效果不佳。

有人想知道如何让它发挥作用?这两个版本中的任何一个?也许有提示?

1 个答案:

答案 0 :(得分:2)

问题是你正在使用if期望它像循环一样工作。在a的底部,您正在递增if,但因为它是while而不是fora,所以它不会跳转回到顶端。

bfor (a=1; a<=c; a++) { for (b=a; b<=c; b++) { if (a*a + b*b == c*c) { count++; } } } 都需要更改,因此您需要一个循环来控制每个。

b

请注意,a从当前值newNode -> data = malloc((1 + strlen(str)) * sizeof(char)); newNode -> data = str; 开始,而不是1.这样,您不会尝试两次相同的数字(只是切换)。