我必须找到所有的毕达哥拉斯三元组,其值为“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.\n\n", (i++)-1);
system("PAUSE");
return(0);
}
答案 0 :(得分:2)
你可以有一个变量来记住最大的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);
}
}
}
}
顺便说一句,通过一个小技巧,你可以轻松加快你的算法:任何时候,你发现^ 2 + b ^ 2&gt; = c ^ 2,你可以立即跳过剩下的最内层循环。您还可以采取其他措施来进一步加快算法速度。