广度优先搜索-N的倍数

本文介绍了一种使用广度优先搜索(BFS)策略来找到符合条件的正整数,即该数各个位上没有指定的数字且是n的倍数。文章通过分析问题并给出代码实现,展示了如何在限制时间内找到最小的这样一个数。在样例中,当n=4999,m=4时,输出的最小倍数为60007996。
摘要由CSDN通过智能技术生成

N的倍数

题目

一个整数能够被另一个整数整除,那么这个整数就是另一整数的倍数!
大哈和小羽去逛夜市,路过一家摆地摊,玩的游戏叫做N的倍数。一开始老板让大哈选一个正整数n,大哈选好之后,老板给出m个号码球,号码的范围在0~9之间,这m个号码互不相同。大哈需要在1秒钟时间快速说出一个数,这个数既要满足各个位上没有老板给出的号码球中的数字之外的数字,又要满足是n的正整数倍。这样的数可能有很多,老板说一定要说出其中最小的那个。老板说如果大哈能在1秒钟说出来,就送出一个玩具熊。大哈接着问到,那万一没有这样的数怎么办?老板说,那我也直接送你一个。现在请冰雪聪明的你帮助大哈拿到玩具熊。
输入格式:
第一行两个正整数 n 和 m (1≤n≤49991≤m≤10)
接下来m行,每行一个号码,号码的范围在0~9之间
输出格式:
输出这个倍数,如果无解则输出0。
样例输入:
4999 4
7
6
9
0
样例输出:
60007996
数据范围:
1≤N≤4999
时间限制:
1000
空间限制:
65536
提示:
约束条件:
在所有的测试数据中答案都不会超过500位。

分析

我们要想办法将组数与广搜联系在一起……
广搜是一层一层搜索的,在这道题目里,第一层是一位数,第二层是两位数,以此类推
所以广搜可以这样做:结构体内存余数和现在的数,放进所有的一位数,一个一个判断余数(是否为0+有没有搜到过+标记),如果余数是0,直接输出并返回;如果不是0但是以前没有搜到过,将余数放进结构体并标记;如果余数不是0并且这个余数以前搜到过,不用做任何事情
判断完成之后,在这个数后面依次添加上那几个限定的数(例如12变121),这样可以保证是从小打到搜索的,第一个满足条件的必定就是答案

但是,有几点需要特别注意:
①要先将限定的一位数排序,再push进队列
②答案可能超过long long的范围(提示也给了),所以需要用字符串存每次的答案
③不要忘记如果没有输出0

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,vis[5005]={
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值