Each line of the input file consists of a valid integer N. An input of zero is to terminate the program.
Your program have to display ALL qualifying pairs of numerals, sorted by increasing numerator (and, of course, denominator).
0
94736 / 01528 = 62
我用了两种方法:
///用循环写,代码较长,需要注意的地方也很多。
#include
#include
int main()
{
int n,i,j,k,l,t,o,p,ans,h;
int b[10]= {0};
int lu[10]= {0};
int pp=0;
while(~scanf("%d",&n)&&n)
{
int kk=0;
if(pp)printf("\n");///除了第一个n之外,每输出一个n后面都要输出一行空格;
pp++;
for(i=0; i<=9; i++) ///找第一个数;
{
ans=i;
for(j=0; j<=9; j++) ///找第二个数;
{
if(j==i)continue;///不能和已找到的数相同;
ans=ans*10+j;
for(k=0; k<=9; k++) ///找第三个数;
{
if(k==i||k==j)continue;///不能和已找到的数相同;
ans=ans*10+k;
for(l=0; l<=9; l++) ///找第四个数;
{
if(l==i||l==j||l==k)continue;///不能和已找到的数相同;
ans=ans*10+l;
for(t=0; t<=9; t++) ///找第五个数;
{
if(t==i||t==j||t==k||t==l)continue;///不能和已找到的数相同;
ans=ans*10+t;
if(ans%n==0)///如果是n的倍数就观察两数之商是否符合条件;
{
p=ans/n;
int f=0;
for(h=0; h<5; h++)
{
o=p%10;
if(o==i||o==l||o==j||o==k||o==t||lu[o])///不能和已找到的数相同;
{
f=1;///不符合条件将lu和b初始化;
memset(lu,0,sizeof(lu));
memset(b,0,sizeof(b));
break;
}
lu[o]=1;
p=p/10;
b[h]=o;
}
if(f)
{
ans/=10;///返回上个ans值;
continue;
}
else///符合条件输出,别忘了初始化;
{
kk=1;
printf("%d%d%d%d%d / %d%d%d%d%d = %d\n",i,j,k,l,t,b[4],b[3],b[2],b[1],b[0],n);
memset(lu,0,sizeof(lu));
memset(b,0,sizeof(b));
}
}
ans/=10;///返回上个ans值;
}
ans/=10;///返回上个ans值;
}
ans/=10;///返回上个ans值;
}
ans/=10;///返回上个ans值;
}
}
if(!kk)printf("There are no solutions for %d.\n",n);///没有答案时;
}
}
///遍历最小值到最大值;
#include
#include
int main()
{
int n,i,j,f;
int pp=0,p,lu[16]={0},a[10]={0},b[10]={0};
while(~scanf("%d",&n)&&n)
{
if(pp)printf("\n");
pp=1;
int ll=0;
for(i=1234;i<=98765;i++)///从最小值到最大值;
{
if(i*n>98765)break;
p=i*n;
int k=i;
int qq=0;
for(j=0;j<5;j++)
{
a[j]=k%10;
k/=10;
if(lu[a[j]])///有重复值时不符合条件,初始化数组;
{
qq=1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(lu,0,sizeof(lu));
break;
}
lu[a[j]]=1;
}
if(qq)continue;
f=0;
for(j=0;j<5;j++)
{
b[j]=p%10;
p/=10;
if(lu[b[j]])///有重复值时不符合条件,初始化数组;
{
f=1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(lu,0,sizeof(lu));
break;
}
lu[b[j]]=1;
}
if(!f)///找到符合条件值时输出,初始化数组;
{
ll=1;
printf("%d%d%d%d%d / %d%d%d%d%d = %d\n",b[4],b[3],b[2],b[1],b[0],a[4],a[3],a[2],a[1],a[0],n);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(lu,0,sizeof(lu));
}
}
if(!ll)printf("There are no solutions for %d.\n",n);///没有结果时;
}
}