C - Find The Multiple (BFS)题解
【还是题目优先】
咕噜咕噜一大圈:
The long-lost Sunday is coming again, and the ACM Laboratory Elimination Competition of Beihua University has begun. Now you have to complete a task: XLS is very happy, because IG won. Now to make him happy, just ask you to help him solve this problem, give you an n, let you find a multiple of M and m for n, but M has a limit. His number is only 0 or 1\. Can you help him solve this problem?
Input
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.
Output
Each input you export a corresponding M, m does not know the unique number of m does not exceed 200 bits.
然后我帮你完完整整翻译了一遍:
失传已久的星期天又将来临,北华大学ACM实验室淘汰大赛也开始了。现在你必须完成一个任务:
XLS非常高兴,因为IG赢了。为了让他开心,就让你帮他解决这个问题:
(这里开始)给你一个n,让你找一个M和m的倍数,但是M有一个限定。他的号码只有0或1。你能帮他解决这个问题吗?输入文件可能包含多个测试用例。每一行包含一个值n(1<=n<=200)。包含零的行结束输入。输出每个输出对应的M,m不知道m的唯一数目不超过200位。
也就是说,找一个数M是n的倍数,而且M只有数字0,1构成;
【解析】
这BFS的非地图应用,刚开始我还真没看懂,不过后来也想到了,所以说,地图上没有宝藏 (ಡωಡ)(认真脸)
就是0,1存数字就行啦!!!注意由于是数字不超200位,尽量还是用long long,再上升难度可结合超大数字运算,但是本题没那么难,仅考察BFS。
【代码来了】

1 #include<cstdio> 2 #include<queue> 3 using namespace std; 4 typedef long long ll; 5 void bfs(int n) 6 { 7 ll start=1,b; 8 queue <ll> a; 9 a.push(start); 10 while(!a.empty()) 11 { 12 b=a.front(); 13 a.pop(); 14 if(b%n==0) 15 { 16 printf("%lld\n",b); 17 return; 18 } 19 a.push(b*10); 20 a.push(b*10+1); 21 } 22 return; 23 } 24 int main() 25 { 26 int n; 27 while(~scanf("%d",&n)&&n) 28 bfs(n); 29 return 0; 30 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!