Find The Multiple
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total 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
2 6 19 0
Sample Output
10 100100100100100100 111111111111111111
这是一道非常简单的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; }