如何打印具有最大斜边的勾股三元组



我必须找到所有的勾股三元组,它们的值"c"(其中c是斜边)小于用户输入的整数。我可以做到这一点,但我也必须打印出哪个三元组的"c"值最大。

# include <stdio.h>
int main()
{
    int i=1, N, a, b, c;
    printf("Please enter an integer number: ");
    scanf("%d", &N);
    for(c=1; c<N; c++)
    {
        for(b=1; b<c; b++)
        {
            for(a=1; a<b; a++)
            {
                if((a*a)+(b*b)==(c*c))
                {
                    printf("n%d.(%d,%d,%d)n", i++, a, b, c);
                }
            }
        }
    }
    printf("nThere are %d triples which contain a c<N.nn", (i++)-1);
    system("PAUSE");
    return(0);
}

你可以用一个变量来记住最大的c。下面添加了注释行,看看:

int largest_c = 0; //define it
for(c=1; c<N; c++)
{
    for(b=1; b<c; b++)
    {
        for(a=1; a<b; a++)
        {
            if((a*a)+(b*b)==(c*c))
            {
                if (c > largest_c) { //found a bigger one, so remember it
                     largest_c = c;
                }
                printf("n%d.(%d,%d,%d)n", i++, a, b, c);
            }
        }
    }
}

顺便说一句,只要有一个小技巧,你就可以轻松地加快你的算法:任何时候,你发现a^2+b^2>=c^2,你都可以立即跳过其余部分,进入最内部的循环。你还可以做其他事情来进一步加快算法的速度。

最新更新