zoukankan      html  css  js  c++  java
  • NOJ1167 丑陋数 想法题

    题意

    丑陋数n的意思是n的全部素数因子仅仅有2,3,5。
    求出前1500个丑陋数。

    (第一个丑陋数是1)

    思路

    用一个数组维护全部的丑陋数。

    一開始数组中仅仅有一个数就是1。
    如今能够确定的丑陋数还有1*2,1*3,1*5。把这三个数中最小的2放进数组。

    然后变成了2*2,1*3,1*5。

    再把最小的一个数放进数组…依次运行下去,直到倒数第三个数填满整个丑陋数数组。
    用c2 c3 c5确定眼下的和2 3 5相乘的丑陋数。

    注意推断三个数有相等的情况。

    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int maxn = 1510;
    int s[maxn];
    int main()
    {
        s[1] = 1;
        int c2=1,c3=1,c5=1;
        for(int i = 2 ; i < maxn ; i ++) {
            //?

    ??

    ?

    s[i]???

    ? int s2 = s[c2]*2,s3 = s[c3]*3,s5 = s[c5]*5; if(s2 < s3) { if(s2 < s5) { s[i] = s2; c2 ++; continue; }else if(s2 > s5) { s[i] = s5; c5 ++; continue; }else { s[i] = s5; c2 ++; c5 ++; continue; } }else if(s2 > s3) { if(s3 < s5) { s[i] = s3; c3 ++; continue; }else if(s3 > s5) { s[i] = s5; c5 ++; continue; }else { s[i] = s5; c5 ++; c3 ++; continue; } }else {//s2 = s3 if(s2 < s5) { s[i] = s2; c2 ++; c3 ++; continue; }else if(s2 > s5){ s[i] = s5; c5 ++; continue; }else { s[i] = s2; c2 ++; c3 ++; c5 ++; continue; } } } int n; while(scanf("%d",&n) && n) printf("%d ",s[n]); return 0; }

  • 相关阅读:
    GC选择之CMS 并发标记清除
    JVM内存概览与GC初步
    Shell 判断语句
    SUID SGID
    maven package
    ACL权限控制列表
    账户与密码管理
    Ubuntu与Centos在登陆安全方面的比较
    【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止
    【Centos7】Delete virtual bridge
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7273305.html
Copyright © 2011-2022 走看看