题意:
给定一个数 n (1 <= n <= 200),求能被 n 整除的十进制表示只包含0 和 1 的数。
解题思路: p * 10 和 p * 10 + 1 两条分支,包含剪枝优化
#include<stdio.h>
#include <stdlib.h>
#include <iostream>
int s=0;
int mod[201];
using namespace std;
void DFS(__int64 p,int n,int k)
{
DFS终止条件
if(s==1||k==20)
return;
if( p % n == 0 )
{
printf("%I64u\n",p);
s=1;
}
else / p * 10 和 p * 10 + 1 两条分支,包含剪枝优化
{
int result = 10 * p;
int model = result % n;
if( mod[model] == 0 ){
mod[model] = 1;
DFS( result, n, k+1 );
}
result = result + 1;
model = ( model + 1 ) % n;
if( mod[model] == 0 ){
mod[model] = 1;
DFS( result, n, k+1 );
}
}
}
int main()
{
int n;
while(cin>>n,n)
{
s=0;
memset( mod, 0, sizeof( mod ) );
mod[1] = 1;
DFS(1,n,1);
}
return 0;
}