poj 1426 Find The Multiple

// 题意: 求能整除n的十进制数,由0或1组成
#include<iostream> // DFS
using namespace std;

int n,ok;
int num[100]={1}; //一定是以 1 开头
int mod(int cur) //判断num[0]-num[cur]所表示的值能否被n整除
{

int s=0;
for(int i=0;i<=cur;++i)
{
s=(s*10+num[i])%n;
}
return s;
}
void dfs(int cur)
{
if(cur>=100) //答案保证不超过100位
return;

num[cur]=1;
if(mod(cur)==0)
{
for(int i=0;i<=cur;++i)
printf("%d",num[i]);
printf("\n");
ok=1;
return;
}

num[cur]=0;
if(mod(cur)==0)
{
for(int i=0;i<=cur;++i)
printf("%d",num[i]);
printf("\n");
ok=1;
return;
}

num[cur]=1;
dfs(cur+1); //在位置cur上填充 1 ,然后继续深搜

if(ok)
return;

num[cur]=0;
dfs(cur+1); //在位置cur上填充 0 ,然后继续深搜
}

int main()
{
while(cin>>n&&n)
{
ok=0;
if(n==1) //当n=1,不必再往下搜索了
{

printf("1\n");
}
else
{
dfs(1); // 首位是 1 ,接下来从第2位开始搜索起
}


}
return 0;
}

posted on 2011-07-22 22:32  sysu_mjc  阅读(124)  评论(0编辑  收藏  举报

导航