寒假前刷题(5)搜索系列 bfs poj 1426

来源:互联网 发布:2017淘宝刷皇冠 编辑:程序博客网 时间:2024/05/22 00:22
Find The Multiple
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 13192 Accepted: 5389 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
 
这是一道非常简单的bfs题目,其实如果不是放在搜索这一类里,我都不敢相信这是一道搜索的题目,首先题目所给的数据非常之大,所以如果想要用暴力去解题的话,肯定会超,所以可以用bfs,将其建成一颗树的样子,如下图:
然后按照层次去遍历他,一旦符合条件即可输出
我的这个程序是用数组来代替队列模拟的,写的比较挫,大牛请绕道
代码如下:
#include<stdio.h>#include<stdlib.h>long long q[9999999];int n;int bfs(){     int front,rear;     long long top;     front=rear=0;     q[rear]=1;      rear++;     while(rear>front)     {           top=q[front];           if(top%n==0)            break;           top*=10;           front++;           q[rear++]=top;           q[rear++]=top+1;     }     printf("%lld\n",top);}int main(){     while(scanf("%ld",&n)&&n)     {          bfs();     }     return 0;}

 
 
原创粉丝点击