C++编程求满足勾股定理的个数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程求满足勾股定理的个数相关的知识,希望对你有一定的参考价值。
输入一个整数 n (0<n<10000000) 表示直角三角形斜边的长度。
要求输出一个整数,表示满足勾股定理的直角三角形个数。
做这个题用了我一小时的时间,一直在考虑循环次数与计算时间的问题,还好算是有结果了
#include <stdio.h>#include <math.h>
int main()
double aa,bb,cc,z;
int a,b,c,cnt=0;
scanf("%d", &c );
cc=c*1.0*c ;//c的平方,用double精度才够,int会溢出
for( a=1;a<c;a++ )
aa=a*1.0*a; //a的平方
bb=cc-aa; //b方
b=(int)(sqrt(bb)+0.005) ; //开方得到b, 加上个精度误差进行取整
z=bb-b*1.0*b ;//检查b*b是不是等于bb. 浮点数比较相等要用减法,因为精度问题
if( z<=0.005 && z>=-0.005 ) //在误差范围内,可视作两数相等
c=b;//为了循环次数控制
cnt++;
printf("%d\\n", cnt );
return 0;
参考技术A for(i=1;i<=3300;i++)
a[i*i]=1;//记录1到3300所有的完全平方数。
for(i=ceil[n/2];i<=n;i++) //能够形成三角形的变成,挨个找。
if(a[n*n-i*i]==1) //如果n-另外一边的平方是完全平方数就可以构成直角三角形
total++; //初始值为0.
}
printf("%d",total); 参考技术B 我怎么想也是无数个啊。。。没有其他条件吗?
用C++语言编写勾股定理求斜边
输入两直角边,输出斜边
参考技术A #include<iostream.h>#include<math.h>int main()
float zjb1, zjb2;
cout<<"输入两直角边的长度:"<<endl;
cin>>zjb1>>zjb2;
cout<<"直角边长为"<<sqrt(zjb1*zjb1+zjb2*zjb2)<<endl;
return 0;
参考技术B #include<iostream>#include<cmath>using namespace std;int main() int a,b; double c; cout<<"请输入a、b:"<<endl; cin>>a>>b; c=sqrt(a*a+b*b); cout<<"c:"<<c;return 0
以上是关于C++编程求满足勾股定理的个数的主要内容,如果未能解决你的问题,请参考以下文章
求编程大神:怎么设计c++程序使在键盘上输入任意一个字符串,输出该字符串,并统计输入的字符个数