POJ_1426_(BFS)
- 找到一个数字
X
(只由1,0组成),且$ X \% n == 0 $
,(数字X能够被n整除) - 输出任意的一个X
还是想不到要用BFS,从1
开始bfs
,加入数字ncur = cur * 10 + i
,保证了数字都由1 0
组成,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
bool vis[201];
int n;
queue<long long> que;
void init() {
memset(vis,0,sizeof vis);
while ( !que.empty() ) que.pop();
}
long long bfs(int mod) {
que.push(1);
while ( !que.empty() ) {
long long cur = que.front();
que.pop();
int k = cur % mod;
if (k == 0 ) return cur;
if ( !vis[k] ) {
vis[k] = 1; // 标记 取余的数
for (int i=0; i<=1; i++) {
long long ncur = cur * 10 + i;
if (ncur % mod == 0) return ncur;
que.push(ncur);
}
}
}
return 0;
}
int main() {
while (cin >> n && n) {
init();
cout << bfs(n) << endl;
}
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!