搜索 H

来源:互联网 发布:纯html源码 编辑:程序博客网 时间:2024/06/06 02:32

Description

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

26190

Sample Output

10100100100100100100111111111111111111
题意:输入一个n 找出 一个十进制的数字,但是由0 1 组成的 ,并且这个数字是n 的倍数
思路: 
这个题主要找怎么讲带1和0的数字一一列举出来,从1开始乘10得到一个数,乘10之后再加一。
这个是关键,之后的方法深搜和广搜都是可以的,原来做的用的是深搜,今天重做了,用的广搜,广搜的答案是最小数的答案,其实有的数字答案不唯一,这个题任意一个答案
都可以。
深度搜索方法, 用unsigned long long int 保存 ,深度搜索<20 , 
     两条路线 1.t*10;
             2.t*10+1;
广搜的方法:
#if 1#include<iostream>#include<queue>using namespace std;void bfs(int n){queue<unsigned long long int> q;q.push(1);while(!q.empty()){unsigned long long int x=q.front();q.pop();if(x%n==0){cout<<x<<endl;return;}q.push(x*10);q.push(x*10+1);}}int main(){int n;while(cin>>n && n){bfs(n);}}#endif 

深搜的方法
Code:
#if  0 #include<iostream>#include<cstdio>typedef unsigned long long int longl ; bool pd ; using namespace std;void fun(longl x , int n , int k){ if(pd) return  ; if(x%n==0) { pd=true ; printf("%I64u\n", x); return  ; } if(k==19) return ; //回溯 fun(x*10,n,k+1) ; //路线1 fun(x*10+1,n,k+1) ; //路线2}int main(){  int n ;  while(cin>> n && n!=0 )  {      pd=false ;   fun (1,n,0);  } } #endif

原创粉丝点击