POJ 1462
来源:互联网 发布:域名生成算法 编辑:程序博客网 时间:2024/05/23 14:04
题意:给出一个整数n在1到200之间,要求找到它的一个倍数仅由0和1组成,长度在200以内。
不要被长度吓死(づ ̄ 3 ̄)づ,unsigned __int64 ( 0~18446744073709551615)就可以存下来结果。
这样可以用DFS,从1开始,每次枚举m*10和m*10+1,一直向下搜索。如果遇到结果的,就直接输出,标记found后再返回。
注意:unsigned __int64 只能存储20位数,因此我们只能搜到第19层,在19层时一定要返回。否则会像我一样悲剧~
AC代码(比较丑,忍一下(*  ̄3)(ε ̄ *))
#include <iostream>#include <cstdio>using namespace std;int n,found;void dfs(unsigned __int64 x,int n,int lay){ if(found) return; if(x%n==0) { printf("%I64u\n",x); found=1; return; } if(lay==19) return; dfs(x*10,n,lay+1); dfs(x*10+1,n,lay+1);}int main(){ while(scanf("%d",&n)!=EOF&&n) { found=0; dfs(1,n,0); //第一个参数代表从1开始查找,第三个代表深搜的层数。 } return 0;}
0 0