求优美和

程序功能求优美和。在等式a+b=c(a<b)中,若数字0~9在a,b,c三个数中出现一次
且仅出现一次,那么这样的等式称为优美和。如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<stdio.h>
#include<stdlib.h>
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<i-1;t++)
      {
          flag=1;
       for(j=t+1;j<i;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<n;i++)
   {
       flag=1;
    for(j=2;j<yms[i][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<n;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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值