【专题一 简单搜索】5. Find The Multiple
题目
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