题目
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.
输入
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.
输出
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.
例子
例1
输入:
2
输出:
10
例2
输入:
6
输出:
100100100100100100
例3
输入:
19
输出:
111111111111111111
题目大意
给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的0
或1
组成。
思路
bfs广度遍历结果,结果的第一个数字肯定是1不是0,所以结果肯定是1xxxxx形式,第二位可以是0或1,第三位可以是0或1,以此类推,进行bfs遍历
代码
public class t1_q5_Find_The_Multiple {
public static void main(String[] args) {
Sloution s = new Sloution();
long res = s.func(19);
System.out.println(res);
}
static class Sloution {
Deque<Long> q = new ArrayDeque<>();
long func(int n) {
q.addLast((long) 1);
while (!q.isEmpty()) {
Long m = q.pollFirst();
if (m % n == 0) return m;
q.addLast(m * 10);
q.addLast(m * 10 + 1);
}
return 0L;
}
}
}
剪枝参考:https://github.com/lyy289065406/POJ-Solving-Reports/tree/master/reports/POJ1426-Find%20The%20Multiple