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 }

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

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

  • 相关阅读:
    mysql误删表,无备份
    感情启示录
    奸的好人之财色战场
    Word神器使用
    Maven工程的Web调试
    IntelIoT技术笔记Java/Eclipse
    IntelIoT技术笔记Maven
    Linux脚本(二)
    MINA
    360是神器
  • 原文地址:https://www.cnblogs.com/ethan3/p/14622355.html
Copyright © 2011-2022 走看看