POJ1426 Find The Multiple BFS

来源:互联网 发布:2015年京东双十一数据 编辑:程序博客网 时间:2024/05/16 11:04

题目大意:给你一个十进制整数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;}


0 0
原创粉丝点击