题目大概:
输入一个数n,输出的数只能含有0和1,而且这个数是n的倍数。
思路:
广搜,深搜都可做,深搜需要控制数不要超long long。
广搜慢点,深搜更快。
代码:
广搜代码---------------
已更新
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
using namespace std;
#define ll long long
ll n;
int bfs()
{
queue<ll>Q;
Q.push(1);
ll sum=0;
while(!Q.empty())
{
ll u=Q.front();Q.pop();
if((u%n)==0)
{
sum=u;
break;
}
ll v;
v=u*10;
Q.push(v);
v=u*10+1;
Q.push(v);
}
printf("%lld\n",sum);
return 0;
}
int main()
{
while(scanf("%lld",&n)&&n)
{
bfs();
}
return 0;
}
深搜代码------------------------
已更新
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define ll long long
ll sum=0;
int flag=0;
ll n;
void dfs(ll x,int ans)
{
if(x%n==0)
{
sum=x;
flag=1;
return;
}
if(ans>=18)return;
dfs(x*10,ans+1);
if(flag)return;
dfs(x*10+1,ans+1);
if(flag)return;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%lld",&n)&&n)
{
flag=0;
dfs(1,0);
printf("%lld\n",sum);
}
return 0;
}