(POJ1426)Find The Multiple <BFS 大数模>
2016-11-21 14:16
435 查看
Find The Multiple
Description
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
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
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111
Source
Dhaka 2002
题意:
给你一个整数n,求他的一个十进制倍数m,要求m只由0,1组成,m最多100位;
分析:
由0,1组成的数从小到大:1,10,11,100,101,110,111.。。。
发现:1后面加个0 就变成了 10 ,后面加个1 就变成了11
10后面加个0 就变成了 100,后面加个1 就变成了 101
。。。。
所以我们可以按照这个规律很快的写出所有的有0,1组成的数。
但是:m可以是100位数。long long 只有64位。
我先按照long long 打了下表结果如下发现36,72等不行
long long 不行就说明m无法被直接表示出来,所以就只能用mod运算了,明确用字符数组来表示m。
然后按照变换规律进行BFS即可。
AC代码:
long long 打表代码:
Description
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
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
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111
Source
Dhaka 2002
题意:
给你一个整数n,求他的一个十进制倍数m,要求m只由0,1组成,m最多100位;
分析:
由0,1组成的数从小到大:1,10,11,100,101,110,111.。。。
发现:1后面加个0 就变成了 10 ,后面加个1 就变成了11
10后面加个0 就变成了 100,后面加个1 就变成了 101
。。。。
所以我们可以按照这个规律很快的写出所有的有0,1组成的数。
但是:m可以是100位数。long long 只有64位。
我先按照long long 打了下表结果如下发现36,72等不行
long long 不行就说明m无法被直接表示出来,所以就只能用mod运算了,明确用字符数组来表示m。
然后按照变换规律进行BFS即可。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; int n; bool v[210]; struct node { char m[110];//m值 int len;//长度 int mod;//取模的结果 }; void bfs() { queue<node> q; while(!q.empty()) q.pop(); memset(v,0,sizeof(v)); node now; now.len = 1; now.m[0] = '1'; now.mod = 1 % n; v[now.mod] = 1; q.push(now); while(!q.empty()) { now = q.front(); q.pop(); if(now.mod == 0) { for(int i=0;i<now.len;i++) printf("%c",now.m[i]); printf("\n"); return ; } now.m[now.len] = '0'; now.len++; now.mod = (now.mod * 10) % n; if(!v[now.mod]) q.push(now); v[now.mod] = 1; now.m[now.len-1] = '1'; now.mod = (now.mod + 1) % n; if(!v[now.mod]) q.push(now); v[now.mod] = 1; } } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(scanf("%d",&n)!=EOF && n) { bfs(); } return 0; }
long long 打表代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; typedef long long LL; int n; void bfs() { queue<LL> q; while(!q.empty()) q.pop(); LL now,ne; now = 1; q.push(now); while(!q.empty()) { now = q.front(); q.pop(); if(now % n == 0) { printf("%d\n",now); return; } for(int i=0;i<2;i++) { ne = now * 10 + i; q.push(ne); } } } int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); while(scanf("%d",&n)!=EOF && n) { bfs(); } return 0; }
相关文章推荐
- POJ1426:Find The Multiple(算是bfs水题吧,投机取巧过的)
- POJ1426: Find The Multiple(bfs,同余定理)
- POJ1426 Find The Multiple —— BFS
- BFS POJ1426 Find The Multiple
- UVALive2701 UVA1189 POJ1426 ZOJ1530 Find The Multiple【BFS】
- Poj1426 Find The Multiple (BFS)
- POJ1426 Find The Multiple(BFS)
- POJ1426 Find The Multiple(DFS||BFS||同余模定理)
- POJ1426:Find The Multiple(BFS)
- POJ Find The Multiple 简单BFS
- poj1426 Find The Multiple
- poj 1426 Find The Multiple(bfs)
- poj 1426 Find The Multiple (bfs 搜索)
- 数论 - 同余 + BFS (Find The Multiple)
- Poj 1426--Find The Multiple(bfs或dfs)
- Find The Multiple (poj 1426 bfs)
- poj1426 - Find The Multiple [bfs 记录路径]
- zoj 1530 Find The Multiple(bfs)
- BFS | 1426 | Find The Multiple
- POJ1426-Find The Multiple