zoukankan      html  css  js  c++  java
  • UVA 136

    在这里插入图片描述

    题目大意:

    所谓丑数,就是除了2 3 5 ,都不能被其他素数整除,输出第1500个丑数。

    解题思路:

    派生的思想,x是丑数,那么2x 3x 5x都是丑数,每次取最小的数,然后通过这个数派生,然后存入集合,直到取到第1500小的时候输出队首元素即可。AC代码:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <queue>
    #include <stack>
    #include <set>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    int main()
    {
        priority_queue<ll, vector<ll >, greater<ll > > q;
        set<ll > s;
        ll a[5] = {2, 3, 5};
        int k = 0;
        q.push(1);
        s.insert(1);
        while (++k)
        {
            ll n = q.top();//每次取队首元素,利用队首元素派生
            q.pop();
            if (k == 1500)
            {
                printf("The 1500'th ugly number is %lld.
    ", n);
                break;
            }
            for (int i = 0; i < 3; i ++)
            {
                ll t = n * a[i];
                if (!s.count(t))//如果这个数是第一次出现则入队
                {
                    s.insert(t);
                    q.push(t);
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    图书-哲学-奥卡姆剃刀:《奥卡姆剃刀原理》
    汉语-词语-认知:认知能力
    汉语-词语-认知:认知水平
    汉语-词语:认知
    pg_dump
    pg_ctl
    pg_controldata
    pg_config
    paste
    passwd
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294204.html
Copyright © 2011-2022 走看看