【专题一 简单搜索】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

经验分享 程序员 微信小程序 职场和发展