poj1426 Find The Multiple

来源:互联网 发布:微信打开浏览器是淘宝 编辑:程序博客网 时间:2024/06/07 11:18

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.

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

题意:输入一个n,输入只包含10两个数字的数,这个数是n的倍数。

打表能过:

#include<cstdio>

#include<cstring>

#include<queue>

#include<algorithm>

#include<iostream>

using namespace std;

int n;

long long a[201]={0,1,10,111,100,10,1110,1001,1000,111111111,10,11,11100,1001,10010,1110,10000,11101,1111111110,11001,100,10101,110,110101,111000,100,10010,1101111111,100100,1101101,1110,111011,100000,111111,111010,10010,11111111100,111,110010,10101,1000,11111,101010,1101101,1100,1111111110,1101010,10011,1110000,1100001,100,100011,100100,100011,11011111110,110,1001000,11001,11011010,11011111,11100,100101,1110110,1111011111,1000000,10010,1111110,1101011,1110100,10000101,10010,10011,111111111000,10001,1110,11100,1100100,1001,101010,10010011,10000,1111111101,111110,101011,1010100,111010,11011010,11010111,11000,11010101,1111111110,1001,11010100,10000011,100110,110010,11100000,11100001,11000010,111111111111111111,100,101,1000110,11100001,1001000,101010,1000110,100010011,110111111100,1001010111,110,111,10010000,1011011,110010,1101010,110110100,10101111111,110111110,100111011,111000,11011,1001010,10001100111,11101100,1000,11110111110,11010011,10000000,100100001,10010,101001,11111100,11101111,11010110,11011111110,11101000,10001,100001010,110110101,100100,10011,100110,1001,1111111110000,11011010,100010,1100001,11100,110111,11100,1110001,11001000,10111110111,10010,1110110,1010100,10101101011,100100110,100011,100000,11101111,11111111010,1010111,1111100,1111110,1010110,11111011,10101000,10111101,111010,1111011111,110110100,1011001101,110101110,100100,110000,100101111,110101010,11010111,11111111100,1001111,10010,100101,110101000,1110,100000110,1001011,1001100,1010111010111,110010,11101111,111000000,11001,111000010,101010,110000100,1101000101,1111111111111111110,111000011,1000};

/*void bfs()

{

    queue<long long>q;

    for(int n=1;n<201;n++)

    {

        q.push(1);

        while(!q.empty())

        {

            long long it=q.front();

            q.pop();

            if(it%n==0)

            {

                cout<<it<<',';

                break;

            }

            q.push(it*10);

            q.push(it*10+1);

        }

        while(!q.empty())

            q.pop();

    }

}*/

int main()

{

    while(~scanf("%d",&n)&&n)

    {

        printf("%I64d\n",a[n]);

    }

    return 0;

}

题意:找出任意一个由01组成的数,而且是n的倍数。unsigned __int64可以存下结果,循环深度<20;

两条搜索路径---t*10;t*10+1;

1. #include<iostream>  

2. #include<cstdio>  

3. #include<cstring>  

4. #include<algorithm>  

5. using namespace std;  

6. bool vis;  

7. int n;  

8. void dfs(unsigned __int64 x,int n,int k){  

9.     if(vis) return;  

10.     if(x%n==0){  

11.         printf("%I64u\n",x);  

12.         vis=true;  

13.         return;  

14.     }  

15.     if(k==19) return;  

16.     dfs(x*10,n,k+1);  

17.     dfs(x*10+1,n,k+1);  

18. }  

19. int main(){  

20.     while(scanf("%d",&n)){  

21.         if(n==0) break;  

22.         vis=false;  

23.         dfs(1,n,0);  

24.     }  

25.     return 0;  

26. }  

 

原创粉丝点击