#include <stdio.h>
int main(){
int a=1,b=1,c=1,d,e;
for(a=1;a<=30&&b<=30&&c<=30;a++)
{for(b=1;a<=30&&b<=30&&c<=30;b++)
{
for(c=1;a<=30&&b<=30&&c<=30;c++)
{d=(a*a)+(b*b);
e=(c*c);
if(e==d)
printf("\n %d %d %d",a,b,c);
}
}
}
}
问题是要打印所有三边形小于30的三胞胎;但是上面的代码没有给出输出
答案 0 :(得分:1)
如果您要查找“毕达哥拉斯三元组”,则必须在相应的while循环之前重置变量
#include <stdio.h>
int main()
{
int a = 1, b = 1, c = 1, d;
while (a <= 30)
{
b = 1;
while (b <= 30)
{
c = 1;
while (c <= 30)
{
d = (a*a) + (b*b);
if (d == c * c)
printf("the triplet is a =%d b=%d c=%d \n", a, b, c);
c++;
}
b++;
}
a++;
}
}
答案 1 :(得分:1)
在您的代码示例中,您正在使用三个while循环,其中a,b和c的初始状态设置为循环的外部。
在第一次运行时,a和b将为1。一旦运行了内部while循环,c就会递增直到它为31,而a和b仍为1。
现在,您的目标是运行所有组合。但是,检查三元组的while循环将永远不会再运行,因为c现在为31并且满足while循环的条件。结果,b会升至31,然后是a。
要纠正,请使用三个for循环,如下所示:
int main(){
for(int i = 1; i <= 30; i += 1)
{
for(int j = 1; j <= 30; j += 1)
{
for(int k = 1; k <= 30; k += 1)
{
int d=(i*i)+(j*j);
if(d==k*k)
{
printf("the triplet is i =%d j=%d k=%d \n",i,j,k);
}
}
}
}
}
或者,重置您的a,b和c(请参阅L_J的答案)