题意
思路
枚举fghij,枚举量为30240,再进行判断是否符合要求。dfs和摆动序列,传球游戏方法类似。a[ ]数组储存结果,b[ ]数组判断是否使用过,最后check判断。
code
#include<cstdio>
#include<cstring>
int n;
int a[15];
int b[15];
int c[15];
int d[15];
int flag=0;
int count=0;
bool check(int c[15],int x)
{
int t;
t=x*n;
if(t/100000!=0) return false;
for(int i=4;i>=0;i--)
{
d[i]=t%10;
t=t/10;
}
for(int i=0;i<=4;i++)
{
for(int j=0;j<=4;j++)
{
if(d[i]==d[j] && i!=j)
return false;
}
}
for(int i=0;i<=4;i++)
{
for(int j=0;j<=4;j++)
{
if(c[i]==d[j]) return false;
}
}
return true;
}
void dfs(int k)
{
if(k>5) return ;
for(int i=0;i<=9;i++)
{
if(b[i]==-1)
{
a[k]=i;
b[i]=1;
if(k==4)
{
int x;
x=10000*a[0]+1000*a[1]+100*a[2]+10*a[3]+a[4];
for(int l=0;l<5;l++) c[l]=a[l];
if(check(c,x))
{
count++;
for(int p=0;p<5;p++) printf("%d",d[p]);
printf(" / ");
for(int o=0;o<5;o++) printf("%d",a[o]);
printf(" = %d\n",n);
}
}
dfs(k+1);
b[i]=-1;
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
count=0;
if(n==0) break;
memset(a,0,sizeof(a));
memset(b,-1,sizeof(b));
if(flag!=0) printf("\n");
dfs(0);
if(count==0) printf("There are no solutions for %d.\n",n);
flag++;
}
return 0;
}