poj-1426-Find The Multiple

来源:互联网 发布:朋友圈配图软件 编辑:程序博客网 时间:2024/05/13 22:13

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

2
6
19
0

Sample Output

10
100100100100100100
111111111111111111

一个很简单的搜索问题吧。
给一个数n,求一个只含0和1的一个十进制数的它的倍数。
深搜,可以去判断这个数模n的余数,如果为0,则返回,如果不为0,则有两种情况,往这个数后面加0或者加1.然后只需要判断它的长度与题目规定的100之间的关系即可

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;bool flag;char s[1005];void dfs(int mod,int d,int n){    if(d>100) return ;    if(mod==0)    {        flag=true;        s[d]=0;        return ;    }    if(!flag)    {        s[d]='0';        dfs((mod*10)%n,d+1,n);    }    if(!flag)    {        s[d]='1';        dfs((mod*10+1)%n,d+1,n);    }}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0) break;        memset(s,0,sizeof(0));        s[0]='1';        flag=false;        dfs(1,1,n);        printf("%s\n",s);    }    return 0;}
0 0
原创粉丝点击