程序功能求优美和。在等式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>
#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 **********/
}
{
/**********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;
{
/**********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;
}
{
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;
}