zoukankan      html  css  js  c++  java
  • 2 3 5 7作为因子构成的数字序列——笔试题

    类似leetcode的丑数II 

    链接:https://leetcode-cn.com/problems/ugly-number-ii/

    说回这个题

    而这个是只有2 3 5 7四种因子,不包含本身,即序列为4 6 8 9 10 ...

    输入正整数n

    输出序列中第n个数 (可能很大,对1e9+7取模)

    用dp三指针实现,cpp代码如下

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int mo = 1e9+7;
     6 
     7 int getNum(int n){
     8     vector<int> dp(n+10);
     9     dp.at(0) = 1;
    10     int p2,p3,p5,p7;
    11     p2 = p3 = p5 = p7 = 0;
    12     for(int i=1;i<n+10;++i){
    13         dp.at(i) = min(min(min(2 * dp.at(p2), 3 * dp.at(p3)), 5 * dp.at(p5)),7 * dp.at(p7)) % mo;    //计算数组, 直接取模
    14         if(dp.at(i) == 2 * dp.at(p2))
    15             ++p2;
    16         if(dp.at(i) == 3 * dp.at(p3))
    17             ++p3;
    18         if(dp.at(i) == 5 * dp.at(p5))
    19             ++p5;
    20         if(dp.at(i) == 7 * dp.at(p7))
    21             ++p7;
    22     }
    23     for(vector<int>::iterator iter = dp.begin();iter!=dp.end(); ){      //删除2 3 5 7四个原因子
    24     if( *iter == 2 || *iter == 3 || *iter == 5 || *iter == 7){
    25           iter = dp.erase(iter);
    26     }else
    27             iter ++ ;
    28     }
    29     return dp.at(n);
    30 }
    31 
    32 int main()
    33 {
    34     int n;
    35     cin>>n;
    36     cout<<getNum(n);
    37     return 0;
    38 }

    测试输出一下序列,正确。

    可惜昨晚笔试的时候没想出来 

  • 相关阅读:
    算法学习算法复杂度
    算法学习冒泡排序和快速排序
    焦点管理
    数据结构学习链表、双向链表、循环链表
    数据结构学习数组、栈和队列
    数据结构学习集合
    数据结构学习字典和散列表
    (转)一个webservice的小demo
    堆栈详解
    JS实现大小写转换
  • 原文地址:https://www.cnblogs.com/ethan3/p/14622355.html
Copyright © 2011-2022 走看看