POJ 1426 Find The Multiple

这一题算是典型的BFS的题,题目大意是要找到一个正整数n的整数倍的数,使它只由0或1组成,找到任意一个即可输出。如果从n开始按倍数枚举再找出有0或1组成的肯定超时,而且程序实现也比较麻烦,于是考虑广搜一下由0或1组成的数,再判断它是否能被n整除。

AC代码如下:

#include <iostream>
using namespace std;

__int64 a[2000000];//由于数可能比较大,所以用64位比较保险
int main()

{
int n;
int k = 0;
a[0] = 1;
while (cin >> n)
{
if (n == 0)
break;
int i = 0;
int temp = 0;//用于记录父节点下标
while (1)

{
if (a[temp]%n == 0)//判断是否可被n整除
{

printf("%I64d\n",a[temp]);
break;
}
else
{
a[++i] = a[temp] * 10;//这里用到二叉树的思想
a[++i] = a[temp] * 10 + 1;

++temp;
}
}
}
return 0;
}



posted @ 2012-02-24 09:23  背着超人飞  阅读(135)  评论(0)    收藏  举报