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;
}