求优美和

程序功能求优美和。在等式a+b=c(a 且仅出现一次,那么这样的等式称为优美和。如56+1987=2043.设计函数求出和小
于10000的所有优美和。提示:a为2位数或3位数,b为3位数或4位数。
编写程序:
1.编写int fun(int  yms[][3])函数求优美和,将求出结果存入yms中,函数返回
优美和的个数。其中yms[][0]存放a,yms[][1]存放b,yms[][2]存放c。
2.编写long sum(int yms[][3],int n),求优美和中第三列所有素数的和,作为函数值返回。


#include
#include
int fun(int  yms[][3])
{
/**********Program**********/
   int b,a,c,m,n,x,i,j,flag,k=0,t; 
 int s[20];
  for(a=10;a<=999;a++)
  {
    for(b=100;b<=9999;b++)
     {
         c=a+b;
      if(a>b||c>=10000)
       continue;
      m=c;
      n=a;
      x=b;
    
      i=0;
      while(m)
      {
          s[i++]=m%10;
       m/=10;
      }
       while(n)
      {
          s[i++]=n%10;
       n/=10;
      }
       while(x)
      {
          s[i++]=x%10;                        //三个while函数把a b c 拆分成单个数字放到数组s中,查找有无相同数字
       x/=10;
      }
             if(i==10)
    {
      for(t=0;t       {
          flag=1;
       for(j=t+1;j           if(s[t]==s[j])
        {                                 //
          flag=0;
       break;
        }
        if(flag==0)
         break;
      }
      if(flag)
      {
       yms[k][0]=a;yms[k][1]=b;yms[k][2]=c;k++;
      }
    }
     }
  }
return k;
/**********  End  **********/
}
long sum(int yms[][3],int n)
{
/**********Program**********/
    int i,flag,j,sum=0;
 for(i=0;i    {
       flag=1;
    for(j=2;j      if(yms[i][2]%j==0)
      flag=0;
     if(flag)
      sum=sum+yms[i][2];
   }
return sum;
/**********  End  **********/
}
int main()
{
        int yms[100][3],i,n,s;
        FILE*fp;
        n=fun(yms);
        s=sum(yms,n);
        if((fp=fopen("DATA.TXT","w"))==NULL){
                printf("FILE open error\n");
                exit(0);
        }
        for(i=0;i                 printf("%3d+%4d=%5d\n",yms[i][0],yms[i][1],yms[i][2]);
                fprintf(fp,"%3d+%4d=%5d\n",yms[i][0],yms[i][1],yms[i][2]);
        }
        printf("一共有%d,其中第三列中素数和为%ld\n",n,s);
    fprintf(fp,"一共有%d,其中第三列中素数和为%ld\n",n,s);
        fclose (fp);
        return 0;
}

你可能感兴趣的:(求优美和)