回 帖 发 新 帖 刷新版面

主题:[原创]我写的关于求一对自然数的c语言程序

#include <stdio.h>
#include <math.h>

void main()
{
  int m,n,i,j,s,t;
  printf("以下是输入的判断的数值范围:\n");
  scanf("%d,%d",&m,&n);
   if((m<1)||(m>100)||(n<1)||(n>100)||(m==n))
        printf("They are wrong datas.\n");
  else {
          if(m>n)
          {
              for(i=n;i<=m;i++)
              {
                  for(j=n;j<=m;j++)
                  {
                    for(t=1;t<=m;t++)
                        for(s=1;s<=m;s++)
                         if(((i+j)==(t*t))&&(fabs(i-j)==(s*s)))
                             printf("%d,%d\n",i,j);
                  }
              }
          }
         else
          {
                 for(i=m;i<=n;i++)
                 {
                     for(j=m;j<=n;j++)
                     {  
                         for(t=1;t<=n;t++)
                           for(s=1;s<=n;s++)
                            if(((i+j)==(t*t))&&(fabs(i-j)==(s*s)))
                            printf("%d,%d\n",i,j);
                    }
                 }
          }
    }

}

回复列表 (共4个回复)

沙发

支持一下,有时间我慢慢看

板凳

你用的是穷举法`时间复杂度太大,查找平均时间长,运算效率不高
有没有更简单的方法`
谢谢!!!

3 楼

我也贴一个,方法和楼主的差不多,但循环次数少一些
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

unsigned int factorial1(unsigned int a);

int main( void )
{
   long m,n,i,j,s,t;
   printf("以下是输入的判断的数值范围:\n");
   scanf("%ld,%ld",&m,&n);
   if((m<1)||(m>100)||(n<1)||(n>100)||(m==n))
      printf("They are wrong datas.\n");
   else
    {
         for(i=1;i<n;i++)
              for(j=1;j<i;j++)
              {
                        for(s=1; s<=i+j; s++)
                            for(t=1; t<=i-j; t++)
                            {
                                if((s == sqrt(i+j))&&(t == sqrt(i-j)) )
                                    printf("%ld, %ld\t", i, j);
                            }                        
                    }                                    
        }
    system("pause");
    return 0;
}



4 楼

都差不多

我来回复

您尚未登录,请登录后再回复。点此登录或注册