编程之美 找出符合条件的整数

好不容易把内容看懂~

最主要的一句话:只需要将10k%N的结果与余数信息数组里非空的元素相加,再去模N,看看会不会出现新的余数~

时间太紧迫~先把自己写的代码贴上,以后再详解

 

 1 int FindMin(int N)
 2 {
 3     if(N <= 1)
 4         return N;
 5 
 6     int* A = new int[N];//这个是记录模N余i之后的数值
 7     
 8     memset(A, -1, sizeof(int) * N);
 9     int factor = 1;
10     A[1] = 1;
11 
12     int i;
13     for(i = 0; ; i ++)
14     {
15         factor *= 10;
16         int m_gaowei = factor % N;
17         
18         if(m_gaowei == 0)
19         {
20             A[m_gaowei] = factor;//保存余数为0的数
21             delete[] A;
22             return factor;
23         }
24 
25         if(A[m_gaowei] == -1)
26         {
27             A[m_gaowei] = factor;
28         }
29         //只要将高位的余数跟余数数组里面的余数相加模上N即可
30         int k;//k代表的是前面的余数
31         for(k = 1; k < N; ++k)//将高位的余数与前面的余数都相加再模上N,若产生新的余数的数值保存下来,另外若得到与以前相同的数值,不更新,因为要保存最小的
32         {
33             int new_wei = (m_gaowei + k) % N;
34             //1新产生的余数不存在,2将factor与k相加,得到新的数,3只与小于factor的数进行想加,不要与后面的相加,与factor相加的数一定要小于factor
35             if(A[new_wei] == -1 && A[k] != -1 && A[k] < factor)//最后一个判断条件是为了不让跟新产生出来的余数的数值相加得到模为0
36             {
37                 A[new_wei] = factor + A[k];
38                 if(new_wei == 0)
39                 {
40                     int kvalue = A[k];
41                     delete[] A;
42                     return factor + kvalue;
43                 }
44             }
45         }
46     }
47 }
View Code

 

 

 

转载于:https://www.cnblogs.com/leewiki/p/3715936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值