poj--1426

来源:互联网 发布:网络暴力的经典案例 编辑:程序博客网 时间:2024/06/08 14:05
Find The Multiple
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 23212 Accepted: 9569 Special Judge

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的非零倍数( nonzero multiple)m,并且m只有0,1组成,m不超过100位,m可能有多个,只要输出其中一个就可以了。简单的dfs。
代码如下:
#include<stdio.h>#include<queue>#include<string.h>using namespace std;int n,flag;int a[110][2];int b[2]={0,1};int res[110];void dfs(int ans,int id){if(flag)return ;if(id>100)return ;if(ans%n==0){flag=1;for(int i=1;i<=id;i++){printf("%d",res[i]);}printf("\n");return ;}for(int i=0;i<2;i++){        if(!a[id+1][b[i]]){        a[id+1][b[i]]=1;        res[id+1]=b[i];        int m=(ans*10+b[i])%n;        dfs(m,id+1);        a[id+1][b[i]]=0;        }}}int main(){while(scanf("%d",&n)&&n){    if(n==1){    printf("1\n");    continue;    }    flag=0;    res[1]=1;memset(a,0,sizeof(a));a[1][1]=1;    dfs(1,1);}return 0;}


0 0
原创粉丝点击