EricYang

Tech Spot of Eric

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

寻找符合条件的整数

任意一个整正数N,求一个最小的正整数M(M>1),使得M*N的十进制表示形式只包含1和0

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     long long M,N;
10     N=99;
11     long long reminder[N];
12     int i,j,k;
13     int noUpdates=0;
14     for(i=0; i<N; i++)
15     {
16         reminder[i]=0;
17     }
18     //dp
19     reminder[1]=1;
20     for(i=1,j=10%N; ;i++,j=(j*10)%N)
21     {
22         long long X=(long long)pow(10,i);
23         bool flag=false;
24         if(reminder[j]==0)
25         {
26             flag=true;
27             reminder[j]=X;
28         }
29 
30         for(k=1; k<N; k++)
31         {
32             if(reminder[k]>0
33                && X > reminder[k]
34                && reminder[(k+j)%N] ==0)
35             {
36                 flag=true;
37                 reminder[(k+j)%N] = X+reminder[k];
38             }
39         }
40         if(flag=false)
41         {
42             noUpdates++;
43         }
44         else
45         {
46             noUpdates=0;
47         }
48         if(noUpdates == N || reminder[0]>0)
49         {
50             break;
51         }
52     }
53     if(reminder[0]==0)
54     {
55         cout<<"no rlt"<<endl;
56     }
57     else
58     {
59         cout<<reminder[0]/N<<endl;
60     }
61     return 0;
62 }
posted on 2012-08-08 17:04  Eric-Yang  阅读(185)  评论(0)    收藏  举报