题目大意:给一个数(>0),求它的一个倍数,要求这个倍数应该仅由0和1构成
解题思路:本来打算从1往上乘,再拆开判断是否仅由0,1组成
结果发现枚举量太大
转而列举0,1数,判断能否整除更加明智一些
1,10,11,100,101,110,111,
队列里的数*10+(0,1)(开始时队列中只有1)
即可保证 不漏0,1数
因此此题使用bfs比较合适
#include <cstdio>
#include <queue>
#include <iostream>
using namespace std;
int main()
{
long long t;
while(scanf("%lld",&t)&&t!=0)
{
queue <long long> q;
while(!q.empty())
q.pop();
q.push(1);
while(!q.empty())
{
long long w=q.front();
q.pop();
for(int i=0;i<2;++i)
{
long long e=w*10+i;
if(e%t==0)
{
printf("%lld\n",e);
goto tzy;
}
else
{
q.push(e);
}
}
}
tzy:;
}
return 0;
}
代码很短,理论上是对的
但是与样例不同
于是想办法与样例靠拢,但无法找到思路
尝试着将代码交一下试试,竟然AC了
仔细浏览了一下题目
发现了:
标题后面,有一个Special Judge
以及
描述中的,多解,任意一个皆可
通过此题对OJ有了新的认识:原来OJ上的答案不一定是固定的
Special Judge