POJ1426:Find The Multiple——BFS
题目描述
定一个n,求n的非零整数倍m,满足m的十进制表示,所有数字均为0或者1
If there are multiple solutions for a given value of n, any one of them is acceptable.
下面的样例输出根据上面这句描述,放了一个烟雾弹,样例输出给的结果非常大,但是只要输出任何一个满足条件的m即可,所有我们可以选择输出最小的
搜索四部曲
状态空间 | 状态转移 | 初始状态 | 目标状态 | |
---|---|---|---|---|
思路1 | n * k | n * k + n | n | n * k |
思路2 | 0,1构成的number | number * 10 number * 10 + 1 |
n | number % n == 0 |
思路1:暴力搜索n的所有非零整数倍m,直到找到符合要求m(十进制所有数字均为0或1)
思路2:反过来考虑,直接搜索所有0,1组成成的数number,看能否满足number % n == 0,否则继续看number0(number * 10)和number1(number * 10 + 1)
显然,思路2要比思路1更高效,搜索树如下

搜索策略选择
由于要选择最小的满足要求的m,因此可以选用BFS策略,即按层搜索
此外,由于所有的搜索结点均不会重复,因此不需要使用visit数组标记重复
代码
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
void BFS(int n){
queue<long long> q;
q.push(1);
while(!q.empty()){
long long current = q.front();
q.pop();
if(current % n == 0){
printf("%lld\n", current);
return ;
}
q.push(current * 10);
q.push(current * 10 + 1);
}
}
int main(){
int n;
while(scanf("%d", &n) != EOF){
if(n == 0){
break;
}
BFS(n);
}
return 0;
}
遇到的坑
使用STL queue提交代码时需要G++编译器,用C++则会TLE,原因不清楚,希望有大佬帮解答
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)