http://poj.org/problem?id=1426
Find The Multiple
Time Limit: 1000MS | | Memory Limit: 10000K |
Total Submissions: 12281 | | Accepted: 5054 | | 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
Source
题意:给一个整数n,求被只有0||1组成的整除的十进制整数。答案可能有多个如n=2,则m=10或者100或1000或者100000。。。只要输出任意一个就行了。
思路:每次加入的数只能是0||1然后就没思路了。怎么弄就可以变成bfs(它归类是bfs),想到的是用什么队列的,对,那就是想办法让0||1进队列。这样一说解题的思路就出来了。
#include<stdio.h>
#include<string.h>
#include<math.h>
int n;
long long now,q[1000000]; //now用long loog 就能A,用int就WA
void bfs()
{
int head,tail;
head=0;
tail=1;
q[tail]=1;
while(head<tail)
{
head++;
now=q[head];//对头出队列
now=now*10;
if(now%n==0)
{
break;
}
q[tail++]=now;//0进队列
q[tail++]=now+1;//1进队列
}
printf("%I64d\n",now);
}
int main()
{
while(scanf("%d",&n)!=EOF&&n!=0)
{
bfs();
}
return 0;
}
bfs还可以参考http://www.ipplelife.com/?p=110
网上还有直接打表的,看看什么是打表http://www.tqniu.com/2012/8/4/00270.html
还有 用dfs做的由于它并不要输出最小的整数所以也可以dfs(我是这么理解的)
dfs:http://acshiryu.com/archives/939
dfs:http://hi.baidu.com/foreverlin1204/item/3bc894c274ed4152bcef6957