Find The Multiple(dfs和bfs都可)

简介: Find The Multiple(dfs和bfs都可)

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

我们分析一下就是建立K*10+1和k*10中必定是由0和1组成的,这样我们按照这个模板套。


具体操作看代码


dfs的ac代码;

 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
long n;
int a[200];
int flag;
void dfs(int c,long long k){
    if(flag||c>=19)return;//控制位数的作用,不要无限搜 
    if(k%n==0){//出现就退出循环 
        printf("%lld\n",k);
        flag=1;
        return;
    }
    dfs(c+1,k*10);//偶数 
    dfs(c+1,k*10+1);//奇数 
}
int main()
{
    while(scanf("%ld",&n)!=EOF){
        if(n==0) break;
        flag=0;
        dfs(0,1);
    }
}


bfs的ac代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
 struct ss
{
  long long a;
};
ss f[10000005],res;
 void bfs()
{
  int l=0,r=1;
  f[1].a=1; 
  while (l<r)
  {
    l++;
    if (f[l].a%n==0)
    {
      cout<<f[l].a<<endl;
      return;
    }
    r++;
    f[r].a=f[l].a*10+1;
    r++;
    f[r].a=f[l].a*10;
  }
}
 int main()
{
  while (scanf("%d",&n)!=EOF)
  {
    if (!n) break;
    bfs();
  }
  return 0;
}
相关文章
|
6月前
|
流计算
POJ 3620--Avoid The Lakes【DFS】
POJ 3620--Avoid The Lakes【DFS】
30 0
Biggest Number (DFS+剪枝)
Biggest Number (DFS+剪枝)
38 0
LeetCode 429. N-ary Tree Level Order Traversal
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
85 0
LeetCode 429. N-ary Tree Level Order Traversal
codeforces1244——D.Paint the Tree(dfs)
codeforces1244——D.Paint the Tree(dfs)
85 0
|
并行计算
Find a way(两个BFS)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally.
1107 0
|
人工智能
poj2356:Find a multiple
题目链接: 【鸽巢原理+乱搞】 其实用不着开$map$ 一步最巧妙的转化是$……$前缀和。 反正本宝宝突发奇想就出来了。 首先,我们分类讨论。 1.当$∃i \in N_{+} $ 且 $i \in [1,n]$ 使 $a_{i} | n$ 则直接选这个数就好 2.没有以上那种特殊情况的话,我们记录前缀和$sum_{i}= \sum _{k=1}^{i} a_{k} (mod \ \ n)$ 然后又有两种情况。
1177 0
C-POJ-1426 Find The Multiple
Description Given a positive integer n, write a program to find out a nonzero multiple m o...
964 0