1109 01组成的N的倍数
Posted SJY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1109 01组成的N的倍数相关的知识,希望对你有一定的参考价值。
基准时间限制:1 秒 空间限制:131072 KB
给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。
例如:N = 4,M = 100。
Input
输入1个数N。(1 <= N <= 10^6)
Output
输出符合条件的最小的M。
Input示例
4
Output示例
100
和http://www.cnblogs.com/zzuli2sjy/p/5731745.html一样;
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cmath> 5 #include <iostream> 6 #include <algorithm> 7 #include <map> 8 #include <queue> 9 #include <vector> 10 #include<set> 11 using namespace std; 12 typedef long long LL; 13 bool flag[6000000]; 14 int ans[20]; 15 set<int>que; 16 set<int>::iterator it; 17 typedef struct pp 18 { 19 int mod; 20 int id; 21 int pre; 22 int digit; 23 pp() 24 { 25 pre=-1; 26 } 27 } ss; 28 ss bns[1000000]; 29 int ask[1000000]; 30 int cp[2000000]; 31 int bfs(int n,int m); 32 int main(void) 33 { 34 int i,j,k; 35 while(scanf("%d",&k)!=EOF) 36 { 37 int n; 38 int m; 39 que.clear(); 40 cp[0] = 0;cp [1] = 1; 41 n = 2; 42 ans[0]=cp[0]; 43 int uu=cp[0]; 44 int t=1; 45 for(i=1;i<n;i++) 46 { 47 if(cp[i]!=uu) 48 { 49 ans[t++]=cp[i]; 50 uu=cp[i]; 51 } 52 } 53 54 if(k==0)printf("0\\n"); 55 else 56 { 57 int sum=0; 58 int id=bfs(t,k); 59 if(id==-1) 60 { 61 printf("0\\n"); 62 } 63 else 64 { 65 while(id!=-1) 66 { 67 ask[sum++]=bns[id].digit; 68 id=bns[id].pre; 69 } 70 for(i=sum-1; i>=0; i--) 71 { 72 printf("%d",ask[i]); 73 } 74 printf("\\n"); 75 } 76 } 77 } 78 return 0; 79 } 80 int bfs(int n,int m) 81 { 82 int i,j,k; 83 int kk=0; 84 memset(flag,0,sizeof(flag)); 85 queue<ss>stc; 86 for(i=0; i<n; i++) 87 { 88 int mod=ans[i]%m; 89 if(!flag[mod]&&ans[i]!=0) 90 { 91 flag[mod]=true; 92 bns[kk].id=kk; 93 bns[kk].mod=mod; 94 bns[kk].pre=-1; 95 bns[kk].digit=ans[i]; 96 stc.push(bns[kk]); 97 kk++; 98 } 99 } 100 while(!stc.empty()) 101 { 102 ss tt=stc.front(); 103 stc.pop(); 104 for(i=0; i<n; i++) 105 { 106 int mod=(tt.mod*10+ans[i])%m; 107 if(!flag[mod]) 108 { 109 bns[kk].id=kk; 110 bns[kk].pre=tt.id; 111 bns[kk].mod=mod; 112 bns[kk].digit=ans[i]; 113 if(mod==0) 114 { 115 return kk; 116 } 117 stc.push(bns[kk]); 118 kk++; 119 flag[mod]=true; 120 } 121 } 122 } 123 return -1; 124 }
以上是关于1109 01组成的N的倍数的主要内容,如果未能解决你的问题,请参考以下文章