POJ1426 Find The Multiple BFS

题目大意:给你一个十进制整数n,让你找出n的十进制倍数m,使m满足每位上的数字只能是0或1。如果存在多个,那么就任意输出一个。


分析:m和n的范围不太大,首先想到的就是暴力=_=!

暴力过程中发现需要同时记录两个结果:当前数cnt乘10之后加0和加1,因为要分别在这两种情况之后考虑后面的情况,后面类推也是如此,感觉像是一层一层的往外搜索---BFS。


实现代码如下:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
ll que[999999];
void bfs(int n)
{
    int cmp1=1,cmp2=1;
    que[cmp1]=1;
    while(cmp1<=cmp2)
    {
        ll cnt=que[cmp1++];
        if(cnt%n==0)
        {
            printf("%lld\n",cnt);
            return ;
        }
        que[cmp2++]=cnt*10;
        que[cmp2++]=cnt*10+1;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)&&n)
      bfs(n);
    return 0;
}


你可能感兴趣的:(POJ1426 Find The Multiple BFS)