zoukankan      html  css  js  c++  java
  • 编程之美 找出符合条件的整数

    好不容易把内容看懂~

    最主要的一句话:只需要将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
  • 相关阅读:
    coding++ :局部 Loading 加载效果
    coding++:快速构建 kindeditor 富文本编辑器(一)
    POJ 1265 计算几何 多边形面积 内部格点数 边上格点数
    POJ 1385 计算几何 多边形重心
    POJ 1584 计算几何 凸包
    POJ 2653 计算几何
    POJ 3666 DP
    POJ 2184 DP 01背包+完全背包
    POJ 2392 DP 多重背包
    POJ 1930 数学
  • 原文地址:https://www.cnblogs.com/leewiki/p/3715936.html
Copyright © 2011-2022 走看看