2019 GDUT 新生专题I选集 F题(POJ - 1426)

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);
	}
}
发布了24 篇原创文章 · 获赞 1 · 访问量 684

猜你喜欢

转载自blog.csdn.net/palax0/article/details/103961334
今日推荐