题目链接:https://vjudge.net/contest/168082#problem/E
题目大意:给你一个1到200中的数,要求输出一个它的倍数,这个倍数只含1和0。
对于我来说是怎么也想不到BFS的。
可以用BFS进行+1和*10的操作。以6为例
一直找到1110%6==0为止。
所以就是一个简单BFS过程
(其实我想说还有更牛逼简单的思路,利用同余取模,DALAO博客:https://blog.youkuaiyun.com/lyy289065406/article/details/6647917)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <fstream>
using namespace std;
typedef long long ll;
/*
inline __int128 read(){
__int128 x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void print(__int128 x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
print(x/10);
putchar(x%10+'0');
}
*/
ll BFS(ll n){
if(n==1)return 1;
queue<ll>Q;
Q.push(1);
while(Q.size()){
ll u=Q.front();Q.pop();
if(u%n==0)return u;
u=u*10;
Q.push(u);
u++;
Q.push(u);
}
}
int main(){
ll n;
while(scanf("%lld",&n)&&n){
printf("%lld\n",BFS(n));
}
return 0;
}