//因为n是小于等于10000可以利用这点进行搜索对n取余则余数为零时就为所找的。因为他的余数肯定小于10000所以不会无休止下去

#include<stdio.h>

#include<string.h>

#include<queue>

#include<iostream>

#include<algorithm>

#define N 1111111

using namespace std;

int pre[N],now[N],a[20];

void find(int k) {

if(pre[k]!=-1) 

find(pre[k]);

printf("%d",now[k]);

}

void bfs(int n) {

int cur,i,j,k,next;

queue<int>q;

for(i=1;i<=9;i++)//判断1位数的情况

if(a[i]==0) {

k=i%n; 

if(k==0)  {

printf("%d\n",i);

return ;

}

if(pre[i]==0) {

pre[i]=-1;

now[i]=i;


q.push(i);

}

}

while(!q.empty()) {

            cur=q.front();

q.pop();

for(i=0;i<=9;i++) 

if(a[i]==0) {

next=cur*10+i;

k=next%n;

if(k==0)  {

 find(cur);

 printf("%d\n",i);

 return ;

}

if(pre[k]==0) {//控制如口如果出现过就肯定不是最小的因为最小的已经加进去过了

pre[k]=cur;//k

now[k]=i;//k

q.push(k);//k的个数是有限的不能用next可能会越界,越界的可能是禁止加入得数组成的数有一些你必须到很大才能遍历完1-10000

}

}

}

  printf("-1\n");

}

int main() {

int n,m,i,j,count=0;

while(scanf("%d%d",&n,&m)!=EOF) {

memset(a,0,sizeof(a));

memset(pre,0,sizeof(pre));

for(i=1;i<=m;i++) {

scanf("%d",&j);

a[j]=1;

}

printf("Case %d: ",++count);

 bfs(n);

 

}

return 0;

}

最新文章

  1. bzoj3932--可持久化线段树
  2. wampserver 2.5多站点配置
  3. Struts2 中Parameters是如何获取值的
  4. java线程之——synchronized的注意细节
  5. 第五章 springboot + mybatis
  6. 【BZOJ】【3856】Monster
  7. 深入理解 AngularJS 的 Scope(转)
  8. 黑马程序员_Java_collections and Arrays(工具类)
  9. 《剑指Offer》面试题-用两个栈实现队列
  10. C#扩充类
  11. Android音乐编程:管理音频焦点
  12. Ocelot中文文档-服务发现
  13. Union 与 Union all 的区别【坑】
  14. Excel VBA(宏):添加宏
  15. python中类方法,实例方法,静态方法的作用和区别
  16. 【PAT】B1062 最简分数(20 分)
  17. 4.93Python数据类型之(8)集合
  18. docker镜像的创建commit及dockerfile
  19. js写法【3】
  20. jsp jsp九个内置对象

热门文章

  1. XSS漏洞解析(三)
  2. qconbeijing2018
  3. android开发学习 ------- json数据与实体类之间的相互转换
  4. AJPFX总结面向对象(this和super的区别和应用)
  5. Linux/Windows 实用工具简记
  6. About App Sandbox
  7. mysql 表锁死的问题
  8. js 数组元素排序?
  9. android 近百个源码项目【转】
  10. xshell通过xftp传输Windows文件到Linux:在输入put后,再摁 TAB 键,可显示当前文件夹的文件