F - BFS/DFS
链接
来源:POJ - 1426
题目描述
给定一个正整数n,找n的一个非零的倍数m,这个m应当在十进制表示时每一位上只包含0或者1。
题目分析
因为感觉dfs可能一去不复返,我选用了bfs。先取操作数为1,然后将操作数×10,分为0、1两条路,加入队列,后面的操作亦如此。
(温馨提示:提交language选G++比较容易ac,本菜鸡的代码选C++无法通过。。若有高见请您私信我,谢谢!!)
代码
#include <cstdio>
#include <queue>
using namespace std;
int n;
long long ans;
//从师兄那里得知答案其实用long long就可以存下了呢。。
void bfs()
{
//long long a=1;
//(之前的错误操作)如果a在循环之前定下,后面分情况时有一边会缺失
queue<long long> que;
que.push(1);
while(1){
long long temp=que.front();
//以下为测试语句,可忽略
//printf("size=%d,que.front=%d\n",que.size(),que.front());
if(temp%n){
que.pop();
temp*=10;
que.push(temp++);
que.push(temp);
}
else{
ans=temp;
break;
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n){
bfs();
printf("%lld\n",ans);
}
}