当前位置:编程学习 > C/C++ >>

急!!!懂c语言的各位帮我写写这道c语言题 谢谢了

若某整数平方等于某两个正整数平方之和的正整数称为弦数。例如:由于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语言编程求解

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,