用C++求130<A+B+C<150且A>B>C的倒勾股数有多少组

//A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为
//倒勾股数。求130<A+B+C<150且A>B>C的倒勾股数有多少组
#include<iostream>
using namespace std;
int main()
{
int a,b,c,k=0;
for(a=1;a<=100;a++)
{
for(b=1;b<=100;b++)
{
for(c=1;c<=100;c++)
{
if(130<a+b+c && a+b+c<150 && 1/(a*a)+1/(b*b)==1/(c*c))
k++;
}
}
}
cout<<k<<endl;
return 0;
}
有多少组该怎么写进去,还能能够把每组都显示出来吗?

我看到两点,需要改变一下
一个是1/(a*a)+1/(b*b)==1/(c*c)这个公式
在c中,abc和1都是int型,那么得到的结果也是int型,所以只要abc不是1,那么得到的结果都是0
所以你会打印的k很多,呵呵
再说了,在c中1/(a*a)+1/(b*b)==1/(c*c)这个式子及时变一下1.0/(a*a)+1.0/(b*b)==1.0/(c*c)结果变成float型,但是在计算机的小数比较上,还是误差很大,所以这个式子需要变一下,让他成为都是整数的比较,统分
都同时乘以a*a*b*b*c*c得到的结果是b*b*c*c+a*a*c*c==a*a*b*b,因为abc都不可能为零,所以这个式子可以用

第二个地方就是bc的变换界限,因为A>B>C,你要是想让abc这三个变量对应ABC的话,那么我建议这么写
for(c=1;c<=100;c++)
{
for(b=c+1;b<=100;b++)
{
for(a=b+1;a<=100;a++)追问

#include
using namespace std;
int main()
{
float a,b,c,k=1;
for(c=1;a<=100;a++)
{
for(b=c+1;b<=100;b++)
{
for(a=b+1;c<=100;c++)
{
if(130<a+b+c && a+b+c<150 && 1.0/(a*a)+1.0/(b*b)==1.0/(c*c))
k++;
}
}
}
cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
return 0;
}
好像不怎么对啊

追答

跟你说了1.0/(a*a)+1.0/(b*b)==1.0/(c*c)这个比较不太准确
用b*b*c*c+a*a*c*c==a*a*b*b这个

追问

程序还是错误~K不能循坏~要不你给我写个程序吧 谢谢了~

追答

cout
using namespace std;
int main()
{
float a,b,c,k=0;
for(c=1;a<=100;a++)
for(b=c+1;b<=100;b++)
for(a=b+1;c<=100;c++)
if(130<a+b+c && a+b+c<150 &&b*b*c*c+a*a*c*c==a*a*b*b )
{

k++;
cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
加上k的打印

}
return 0;
}
应该可以吧,呵呵

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-30
#include<iostream>
using namespace std;
int main()
{
double a,b,c,k=0;
for(c=1;c<=100;c++)
{
for(b=c;b<=100;b++)
{
for(a=b;a<=100;a++)
{
if(130<a+b+c && a+b+c<150 && 1/(a*a)+1/(b*b)==1/(c*c))
{
k++;
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
cout<<k<<endl;
return 0;
}
经测试符合你的要求,望采纳!谢谢!有问题可以追问!追问

输出为0

第2个回答  2012-11-28
把K++;改为cout<<"A="<<a<<" B="<<b<<" C="<<c<<" "<<++k<<endl;追问

死循坏了;

追答

已经测试

#include
using namespace std;
int main()
{
float a,b,c;
int k=0;
for(a=1.0;a<=100;a++)
{
for(b=1.0;b<a;b++)
{
for(c=1.0;c<b;c++)
{
if(130<a+b+c && a+b+c<150 && 1/(a*a)+1/(b*b)==1/(c*c))
cout<<"A="<<a<<" B="<<b<<" C="<<c<<" "<<++k<<endl;
}
}
}
cout<<k<<endl;

return 0;
}

用C++求130<A+B+C<150且A>B>C的倒勾股数有多少组
在c中,abc和1都是int型,那么得到的结果也是int型,所以只要abc不是1,那么得到的结果都是0 所以你会打印的k很多,呵呵 再说了,在c中1\/(a*a)+1\/(b*b)==1\/(c*c)这个式子及时变一下1.0\/(a*a)+1.0\/(b*b)==1.0\/(c*c)结果变成float型,但是在计算机的小数比较上,还是误差很大...

用C++求130<A+B+C<150且A>B>C的倒勾股数有多少组
在c中,abc和1都是int型,那么得到的结果也是int型,所以只要abc不是1,那么得到的结果都是0 所以你会打印的k很多,呵呵 再说了,在c中1\/(a*a)+1\/(b*b)==1\/(c*c)这个式子及时变一下1.0\/(a*a)+1.0\/(b*b)==1.0\/(c*c)结果变成float型,但是在计算机的小数比较上,还是误差很大...

...A^2+1\/B^2=1\/C^2关系时,称为倒勾股数。求130<A+B+C<150且A>B>C...
for(c=1;c<=100;c++)if((1\/pow(a,2)+1\/pow(b,2)==1\/pow(c,2))&&a>b&&b>c)n++;printf("%d",n);}

有没c++的题集及答案
答案没有1、A,B,C三个正整数,当满足1\/A^2+1\/B^2=1\/C^2关系时,称为倒勾股数。求130<A+B+C<150的倒勾股数有多少组。2、倒勾股数是满足公式: 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均...

c语言a>b>c,且abc均小于等于100的倒勾股数有多少组
void){int a,b,c;int count = 0;\/\/统计有多少组for(c = 1; c <= 100; c++){for(b = 1; b <=100;b++){for(a = 1; a <=100;a++)if(b*b+c*c==a*a && (b<a &&b > c )){printf("%d^2+%d^2 = %d^2\\n",c,b,a);count ++;}}} printf("总共有%d组\\...

怎么求C++ 中输出100以内的三个数互质的一组勾股数
int _tmain(int argc, _TCHAR* argv[]){ \/\/算法:两个相邻数(b,c)相加,如果是一个完全平方数(a 的平方)\/\/那么 a^2 + b^2 = c^2,且 a,b,c 互质 int i, j;for (i = 1; i < 100; i++){ j = (int)sqrt((double)(i + i + 1));if (j * j == i + ...

用C++输出100以内的基本勾股数,帮帮忙吧
include<iostream>bool ishz(int a,int b,int c){ int i; for(i=2;i<=a;i++) if(a%i==0&&b%i==0&&c%i==0)break; if(i>a)return true; return false;}int main(void){ int i,j,k; for(i=1;i<=100;i++) for(j=i+1;j<=100;j++) for...

C语言程序求勾股数
int main(int argc, char* argv[]){ int a,b,c,count=0;for(a=1;a<=1000;a++)for(b=1;b<=1000;b++)for(c=a-b;c<a+b && c<1000;c++)if(c*c==(a*a + b*b)){ count+=1;printf("%d,%d,%d\\n",a,b,c);} printf("共计有 %d 组\\n",count);system("pause");...

如何用C输出100以内的所有勾股数?
include <stdio.h> int main(){int a,b,c,k=0;for(a=1;a<70;a++)for(b=a+1;b<71;b++)for(c=b+1;c<=100;c++)if(a*a+b*b==c*c){ printf("%4d%4d%4d\\t",a,b,c);k++;} printf("Total=%d\\n",k);getch();return 0;} ...

用c语言求解 输出1-50以内的所有勾股数
include <stdio.h>void main(){int a,b,c;for(a=2;a<=48;a++)for(b=a+1;b<=49;b++)for(c=b+1;c<=50;c++)if(a*a+b*b==c*c)printf("%-4d%-4d%-4d\\n",a,b,c);}

相似回答