暴力dfs POJ1426

来源:互联网 发布:软件设计师模拟题 编辑:程序博客网 时间:2024/05/18 20:35
/*           题目地址:http://poj.org/problem?id=1426点击打开链接        题目大意:找出仅用0和1 组成的十进制的数构成是出入n的倍数(n<=200)        解题思路:有人直接打表打了200个,因为并不像想的那样数据那么大,有的直接用数学原理。                            当然我用了dfs深搜从第一位1开始往下搜,而且是暴力搜索。。。*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;int p,pos;char res[102];int dfs(int step,int a){if(step>100)return 0;        //return 0,则回溯,继续。           if(a%p==0&&step>=0&&step<=100){     res[++pos]='\0';             return 1;}  else  {  pos++;  res[pos]='0';  if(dfs(step+1,(a*10+0)%p))   return 1;     //return 1,则结束。  pos--;  pos++;           //pos++,--来控制res数组保存的值。  res[pos]='1';   if(dfs(step+1,(a*10+1)%p))    return 1;  pos--;  return 0;        //必须回溯  }}   int main(){   while(cin>>p&&p)   {   pos=-1;   res[++pos]='1';        dfs(1,1);   cout<<res<<endl;   }   return 0;}