一道C语言编程问题,高手们来看看帮忙解答下

倒勾股数是满足公式:1/A^2+1/B^2=1/C^2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/156^2+1/65^2=1/60^2。假定A>B>C,且要求A,B,C均小于或等于100,求满足倒勾股数公式的A,B,C之和的最大值是多少?

先推算公式,C^2*(A^2+B^2),= (A^2*B^2),程序就是找寻能让公式左右相等的ABC的值,且0<c<b<a<100.

#include <stdio.h>

int main()

{

int a;//定义循环变量。

int b;

int c;

int sum;//ABC之和。

for (a = 100;a > 0;a--)//以A为循环变量,在1到100之间。

{

for (b = a-1;b > 0;b--)//以B为循环变量,在1到A之间。

{

for (c = b-1;c > 0;c--)//以C为循环变量,在1到B之间。

{

//判断公式左右两侧是不是相等,相等侧符合题目要求

if (c*c*(a*a+b*b) == a*a*b*b)

{

sum = a+b+c;    //判定成立,求和

printf("SUM = %d\nA = %d\nB = %d\nC = %d\n",sum,a,b,c);

return 0;

}

}

}

}

return 0;

}输出结果为:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-28
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,ans=0;
double c;
for (a=100;a>2;--a)
for (b=a-1;b>1;--b)
{
c=sqrt(1.0/(1.0/(a*a)+1.0/(b*b)));
if (c==(int)c) {if (a+b+(int)c>ans) ans=a+b+(int)c;}
}
printf("%d\n",ans);
while (1);
return 0;
}
改了无数次啊。。终于对了。。鄙视一下那个叫“李离萍”的,抄袭我的!可耻!不过是错的~
第2个回答  2011-05-28
#include<stdio.h>
int main()
{
long a = 100,b = 99, c = 98;
for (a = 100;a>2;a--)
{
for (b = a-1; b>1;b--)
{
for (c = b-1;c>0;c--)
{
if((a*a+b*b) == (b*b*c*c+a*a*c*c))
{
printf("Result is %d\n",a+b+c);
return 0;
}
}
}
}
printf("There aren't three numbers like those!\n");
return 0;
}
第3个回答  2011-05-28
#include<math.h>
int main()
{
int a,b;
floult c;
for (a=100;a>2;--a)
for (b=a-1;b>1;--b)
{
c=sqrt(1.0/(1.0/(a*a)+1.0/(b*b)));
if (c==(int)c) {printf("%d %d %d\n",a,b,(int)c);while(1);}
}
}
相似回答