寻找符合条件的整数

任意一个整正数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 }

转载于:https://www.cnblogs.com/eric-blog/archive/2012/08/08/2628628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值