//前几天做了个1136,看到这题和它挺相似的不过此题没用BFS做,偷了懒看别人都是用dfs加随机化算法做的
学习一下。因为题目要求任意结果都是accepttable,可以用随机化算法优化。为了防止一直向左或右搜索。
#include<cstdio>
#include<stdlib.h>
#include<time.h>
#include<cstring>
#define MAX 99
int n;
int num[MAX];
bool flag;
void print(int *a,int len)
{
int i=0;
while(i<len)
printf("%d",a[i++]);
printf("\n");
return ;
}
void dfs(int *num, int depth,int r)
{
if(depth>MAX||flag) return ;
int temp=r*10;
if(!(temp%n))
{
num[depth-1]=0;
print(num,depth);
flag=true;
}
if(!(temp+1)%n)
{
num[depth-1]=1;
print(num,depth);
flag=true;
}
if(rand()&1)
{
num[depth-1]=1;
dfs(num,depth+1,(temp+1)%n);
num[depth-1]=0;
dfs(num,depth+1,temp%n);
}
else
{
num[depth-1]=0;
dfs(num,depth+1,temp%n);
num[depth-1]=1;
dfs(num,depth+1,(temp+1)%n);
}
return ;
}
int main()
{
srand((unsigned)time(NULL)); //设置随机数种子
while(scanf("%d",&n))
{
if(n==0) break;
flag=false;
memset(num,0,sizeof(num));
num[0]=1;
dfs(num,2,1);
}
return 0;
}