poj 1426 Find The Multiple(bfs)
2013-01-26 21:25
323 查看
题目:http://poj.org/problem?id=1426
题意:
给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。
注意:
1、要求的这个数,大数肯定不能存,需要用数组存
2、这个数的最高位一定是1
3、剩下的各个位只有两种可能,要么是1,要么是0,用bfs来处理
4、停止bfs的条件是m%n==0,即可以利用上一位的余数×10%n,若等于0,则停止,否则继续。
5、最后是输出部分,利用的是同余模定理处理,把*10操作转化为%2操作,逆向输出就可以了
代码:
View Code
题意:
给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。
注意:
1、要求的这个数,大数肯定不能存,需要用数组存
2、这个数的最高位一定是1
3、剩下的各个位只有两种可能,要么是1,要么是0,用bfs来处理
4、停止bfs的条件是m%n==0,即可以利用上一位的余数×10%n,若等于0,则停止,否则继续。
5、最后是输出部分,利用的是同余模定理处理,把*10操作转化为%2操作,逆向输出就可以了
代码:
View Code
#include <iostream> #include<cstdio> using namespace std; int mod[600000]; int main() { int n; int i; while(scanf("%d",&n)!=EOF) { if(n==0) break; mod[1]=1%n; for(i=2;mod[i-1]!=0;i++) { mod[i]=(mod[i/2]*10+i%2)%n;//i%2模仿了广搜的两个入口 } i--; int j=0; while(i) { mod[j]=i%2;//把*10操作转化为%2操作,逆向求倍数的每一位数字 i/=2; j++; } while(j) { cout<<mod[--j]; } cout<<endl; } return 0; }
相关文章推荐
- D - Find The Multiple POJ - 1426 ——DFS || BFS
- POJ 1426 Find The Multiple(同余模定理优化双入口BFS)
- Poj 1426--Find The Multiple(bfs或dfs)
- POJ1426-Find The Multiple-深度优先搜索BFS
- poj 1426 Find The Multiple(搜索BFS的思想+ 同余模定理+二叉树+01哈夫曼编码)
- poj 1426 Find The Multiple(bfs)
- POJ 1426 Find The Multiple(BFS 同余模定理)
- POJ 1426 Find The Multiple (bfs搜索)
- POJ 1426 Find The Multiple(BFS)
- POJ-1426 (Find The Multiple) bfs
- POJ 1426 Find The Multiple --- BFS || DFS
- poj 1426 Find The Multiple (bfs 搜索)
- poj - 1426-Find The Multiple-BFS
- poj 1426 Find The Multiple (BFS)
- POJ 1426 Find The Multiple (BFS基础)
- POJ 1426 Find The Multiple(简单搜索bfs)
- POJ 1426 BFS-Find The Multiple
- POJ1426-Find The Multiple (BFS 余数)
- POJ 1426 Find The Multiple (BFS)
- 【原】 POJ 1426 Find The Multiple BFS搜索 解题报告