poj1426——Find The Multiple

来源:互联网 发布:网络电影扫黄完整版 编辑:程序博客网 时间:2024/05/16 07:57

题目大意:给出一个正整数n,找出它的倍数m,要求m的十进制形式只由0和1组成并且不超过100位数字

输入:(可以有很多个case,输入以0结尾)

            第i个case的n(1<=n<=200)

输出:(如果有多个m,则输出任意一个)

            第i个case的m

分析:bfs搜索,一位一位地确定,每位只有两种选择即0或1,每次扩展都在末尾加0或1,初始化最高位肯定为1,要注意到如果i为偶数,则不用计算,直接ans[i]=ans[i/2]+"0";

           根据同余模定理,可以将前一步所得的余数当做前一步的字符串

代码:转载自http://blog.csdn.net/wangjian8006/article/details/7460523

  1. #include <iostream>  
  2. #include <string>  
  3. #include <queue>  
  4. using namespace std;  
  5.   
  6. typedef struct{  
  7.     int mod;  
  8.     string ans;  
  9. }Node;  
  10. Node node[210],temp,now;  
  11. bool dis[210];  
  12.   
  13. void bfs(int i){  
  14.     int x,y;  
  15.     queue <Node>q;  
  16.     memset(dis,false,sizeof(dis));  
  17.       
  18.     dis[1]=true;  
  19.     temp.ans="1";  
  20.     temp.mod=1;  
  21.     q.push(temp);  
  22.   
  23.     while(!q.empty()){  
  24.         now=temp=q.front();  
  25.         q.pop();  
  26.   
  27.         x=(temp.mod*10+1)%i;  
  28.         y=(temp.mod*10)%i;  
  29.           
  30.         if(!x){  
  31.             node[i].ans=temp.ans+"1";  
  32.             return ;  
  33.         }  
  34.         if(!y){  
  35.             node[i].ans=temp.ans+"0";  
  36.             return ;  
  37.         }  
  38.         if(!dis[x]){  
  39.             temp.ans=temp.ans+"1";  
  40.             temp.mod=x;  
  41.             q.push(temp);  
  42.             dis[x]=true;  
  43.         }  
  44.         if(!dis[y]){  
  45.             now.ans=now.ans+"0";  
  46.             now.mod=y;  
  47.             q.push(now);  
  48.             dis[y]=true;  
  49.         }  
  50.     }  
  51. }  
  52.   
  53. int main(){  
  54.     int i,n;  
  55.     node[1].ans="1";  
  56.     for(i=2;i<=200;i++){  
  57.         if(i%2==0) node[i].ans=node[i/2].ans+"0";  
  58.         else bfs(i);  
  59.     }  
  60.     while(scanf("%d",&n) && n){  
  61.         cout<<node[n].ans<<endl;  
  62.     }  
  63.     return 0;  
  64. }