急!!!懂c语言的各位帮我写写这道c语言题 谢谢了
若某整数平方等于某两个正整数平方之和的正整数称为弦数。例如:由于3^2+4^2=5^2,则5为弦数,求[100,200]之间弦数的数目 追问:题目到底是说弦数在100~200 还是三个数都要在这个范围? 求解!
追问:怎么变成水仙花数了 搞错了吧 不过还是要谢谢了
若某整数平方等于某两个正整数平方之和的正整数称为弦数。例如:由于3^2+4^2=5^2,则5为弦数,求[100,200]之间弦数的数目 追问:题目到底是说弦数在100~200 还是三个数都要在这个范围? 求解!
追问:怎么变成水仙花数了 搞错了吧 不过还是要谢谢了
答案:当然是只要弦数在这范围里面就行了
#include<stdio.h>
#include<math.h>
bool fun(int n)
{
double temp;
int m=sqrt(n)+1;
for(int i=1;i<n;i++) // 这一句可以优化一下,减少循环次数 for(int i=1; i<m;i++)
{
temp=sqrt((double)(n*n-i*i));
int s=(int)temp;
if( s == temp)
{
//如果要输出另外2个数,可以在这里加上
return true;
}
}
return false;
}
void main()
{
int count=0;
for(int i=100;i<=200;i++)
{
if(fun(i))
count++;
}
printf("%d",count);//看错题目,要求的是输出数量
}
其他:[100,200]之间弦数,简单的方法:
#include<stdio.h>
void main()
{
int a,b,c,i=0;
for(c=100;c<200;c++)
for(a=1;a<200;a++)
for(b=1;b<200;b++)
if(a*a+b*b==c*c) {
i++;
printf("%d.%d^2+%d^2=%d^2\n",i,a,b,c);
c++;
}
} #include <stdio.h>
#include <math.h>
int main(void){
int i,j,k,square;
int num[100];//存放所有弦数,包含重复
int count = 0;//计数
for(i=1; i<200;i++){
if(i*i > 20000)//防止a,b重复: 200^2 除以2
break;
for(j=i+1;j<200;j++){
square = i*i + j*j;//平方数
k = (int)sqrt(square);
if((k>=100 && k<=200) && square == k*k){//判断平方是否符合条件
printf("%d: %d^2+%d^2=%d^2\n",++count,i,j,k);
num[count] = k;//将所有的弦数存到数组中
}
}
}
//去除重复弦数
for(i=1;i<=count;i++){
k=num[i];
if(k == 0) continue;
printf("%d,\n",k);//输出不重复的[100,200]的弦数
j=i;
//去除相同的弦数
for(j=i;j<count;j++){
if(num[j]==k){//重复则置0
num[j]=0;
}
}
}
return 0;
} 你要的水仙花数
我运行过的
#include<stdio.h>
main()
{
int a,b,c,n;
for(n=100;n<=999;n++)
{
a=n/100;
b=n/10%10;
c=n%10;
if( n== a*a*a + b*b*b + c*c*c )
printf("%d\n",n);
}
}
上一个:求C语言高手帮忙改下程序,关于科学计数法的
下一个:C语言编程求解