高手帮我编下这个C语言的题哈 谢谢!
找出1000以内满足勾股定理的所有的数。
题就是这样 高手们帮帮忙哈
参考答案:楼上的编的我认为都不是最优化的算法。我认为最后的c可以根据ab算出来,不用再穷举了。这样可以大大减少程序的时间复杂度。
我编的完整程序如下。
C++版:
#include <fstream>
#include <iostream>
using namespace std;
#include <cmath>
ofstream fout ("勾股定理.txt");
int main (void)
{
fout<<"下面是1000以内满足勾股定理的所有的数:"<<endl;
cout<<"下面是1000以内满足勾股定理的所有的数:"<<endl;
int a,b,c;
for (a=1;a<=1000;a++)
for (b=a;b<=1000;b++)
{
c=(int)sqrt(a*a+b*b);
if (sqrt(a*a+b*b)==c&&c<=1000)
{
fout<<a<<' '<<b<<' '<<c<<endl;
cout<<a<<' '<<b<<' '<<c<<endl;
}
}
fout<<"end"<<endl;
cout<<"end"<<endl;
return 0;
}
这个程序会将结果输出到屏幕和文件"勾股定理.txt"中。
打开"勾股定理.txt"即可看到结果了。
这种算法我运行了一下,时间不超过3秒。
还有一个C语言版的(没有文件输出):
#include <stdio.h>
#include <math.h>
int main ()
{
printf ("下面是1000以内满足勾股定理的所有的数:\n");
int a,b,c;
for (a=1;a<=1000;a++)
for (b=a;b<=1000;b++)
{
c=(int)sqrt(a*a+b*b);
if (sqrt(a*a+b*b)==c&&c<=1000)
printf("%d %d %d\n",a,b,c);
}
scanf ("%d",&a);
return 0;
}
最后一个scanf是为了让程序停下来,让你看清楚结果。
还有什么问题可以加我好友。