题意:给出一个200以内的数n,求出这个数的倍数M,使得M中只有0和1组成。M最多100位。

分析:这个题竟然用的是bfs的思想。不看讨论真的想不出来。思路是这样的:

1.最高位一定是1.curnum%n不为0时,说明curnum不符合要求。

2.判断curnum*10%n和(curnum*10+1)%n是否为0,不为0的话,令curnum=curnum*10和curnum*10+1继续做第二步。直到取余之后为0即可。

3.这样就会遇到大数存储的问题。可以这样解决:

令 (curnum*10+1)%n=a,求((curnum*10+1)*10+1)%m.

由定理

(a*b)%n = (a%n *b%n)%n

(a+b)%n = (a%n +b%n)%n

得((curnum*10+1)*10+1)%m=(a*10+1)%m.前一步操作得到的余数可以代替当前步的k值。

这样存储一个mod[]即可。

4.最后输出结果。比如求6的倍数。

用数组mod[]存储余数,其中mod[0]不使用,由mod[1]开始

那么mod中的余数依次为: 1 4 5 4 5 2 3 4 5 2 3 2 3 0  共14个

令i=14,通过观察发现,i%2恰好就是 6 的倍数的最低位数字

i/2  再令 i%2 ,恰好就是 6 的倍数的 次低位数字。。。

循环这个操作,直到i=0,就能得到 6的 01倍数(一个01队列),倒序输出就是所求

这样就完成了 *10操作到 %2操作的过渡。

代码

View Code

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <memory.h>
 4 using namespace std;
 5
 6 const int maxnum=524286;  //这个数字是找的网上的。
 7 int mod[maxnum];
 8
 9 void digui(int m)
10 {
11     if(m==0) return ;
12     digui(m/2);
13     printf("%d",m%2);
14 }
15
16 int main()
17 {
18     int m,cnt;
19     while(scanf("%d",&m)!=EOF)
20     {
21         if(m==0) break;
22         memset(mod,0,sizeof(mod));
23         cnt=1;
24         mod[cnt]=1;
25         cnt++;
26         while(1)
27         {
28             mod[cnt]=mod[cnt/2]*10%m;  //模拟bfs
29             if(mod[cnt]==0) break;
30             cnt++;
31             mod[cnt]=(mod[cnt/2]*10+1)%m;
32             if(mod[cnt]==0) break;
33             cnt++;
34         }
35         digui(cnt);  //递归比较费时间。
36         printf("\n");
37     }
38     return 0;
39 }

转载于:https://www.cnblogs.com/pushing-my-way/archive/2012/07/30/2614541.html

poj1426_模拟BFS相关推荐

  1. csu 1536 Bit String Reordering(模拟 bfs+状态压缩)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 题意: 输入n个只为 0或1 的数 形成一个排列 再输入m个数 每个数代表 目标排列 (样例 ...

  2. PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 题意重述:求一棵树中结点数量最多的层数,并输出最大的数量. 分析:使用邻接矩阵存储树,bool型变量g[N][N] 邻接矩阵,如果有边 置为t ...

  3. Codeforces 676D Theseus and labyrinth 模拟+bfs

    D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...

  4. 【BZOJ】1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机(模拟+bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1615 这种题..... #include <cstdio> #include <c ...

  5. 暴力技术(一)——BFS广(宽)度优先搜索

    bfs算法思想及实现 以老鼠走迷宫为例,如果说DFS是一只老鼠将整个图走到底,那么BFS就是一群老鼠走迷宫,也可以称作"并行处理"的模拟.假设老鼠是无穷多的,这群老鼠进去后,在每个 ...

  6. Find The Multiple POJ - 1426(只包含01的十进制倍数(同余模定理))

    Find The Multiple POJ - 1426 为了避免各位没心情看我的TLE 的过程,直接告诉你,最后两个代码是AC代码 bfs一位一位枚举,知道会爆LONG LONG 还是怀着侥幸心理试 ...

  7. 过去可忆,未来可期(随心录+杂记)

    2019.5.30 去年的这个时候心智FAMILY已经在前往苏州的火车上愉快狂欢颓废了. 历史总是在重演,只是已经今非昔比,物是人非. 明天的机房就要空荡许多了啊,长达30天不能再和我的风浔凌大佬一起 ...

  8. [USACO1.4]母亲的牛奶 Mother's Milk

    https://www.luogu.org/problemnew/show/P1215 题解:模拟+BFS /* *@Author: STZG *@Language: C++ */ #include ...

  9. Applese 走迷宫

    https://ac.nowcoder.com/acm/contest/330/C C++版本一 std 题解: 搜索,模拟 BFS 求最短路. 注意点是状态要三维.d[x][y][0/1]表示在(x ...

最新文章

  1. mysql pstop_ps-top 用于MySQL的数据库top工具
  2. 关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7
  3. python安装步骤win10-教你如何在Win10系统安装Python?
  4. KnockOut绑定
  5. .net core 后台 post设置等待时间_[vueelementadmin]前端发送的post请求的数据,后端接收不到并报EOFException异常的解决方案...
  6. 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
  7. linux pn,Linux环境变量设置--总结
  8. 坚决反对“企业文学化”
  9. 软件测试加油站ic卡管理系统,加油站IC卡管理系统,加油机IC卡管理系统,加油站自助加油机功能介绍...
  10. 数值分析实验报告 matlab,数值分析方法与实验基于MATLAB实现
  11. MATLAB使用教程(一)——从零开始,基础,数据类型——新手来看
  12. 职场菜鸟捕食指北【相亲篇】
  13. 我将进化成一条狗(9)——基因治疗
  14. iOS复习中有关SDWebImage可能知识点总结
  15. 微信聊天记录删除后如何恢复?原来只要这样就可以了
  16. 屏蔽eslint检测某项报错
  17. 还在纠结芯片引脚需要加多大容值的电容吗?
  18. 分层强化学习综述:Hierarchical reinforcement learning: A comprehensive survey
  19. Milking Order(拓扑+二分+优先队列)
  20. 软件开发成本计价及相关问题

热门文章

  1. redis保存dataset
  2. 把时间投资在自己的未来
  3. 【Matlab】矩阵三角分解法求解方程组
  4. 云计算助力企业快速转型
  5. Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法
  6. iOS开发之 [NSNull length]:unrecognized selector sent
  7. 2015年百度之星初赛(1) --- D KPI
  8. 【一天一个shell命令】好管家-磁盘-du
  9. 项目管理在企业发展中的作用及未来的发展方向—— 来自项目管理群的讨论
  10. 最新Butterknife集成 全部方法(完整版)