文章标题

问第几个非丑数的值…例如第一个是7,第二个是11。

#include <cstdio>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long LL;
typedef pair<LL,int> PR;
int n;
LL rep[1530];
void init()//创建一个丑数数组
{
    priority_queue<PR,vector<PR>,greater<PR> >Q;
    Q.push(make_pair(1,2));
    for(int i=1;i<=1500;i++)
    {
        PR p=Q.top();
        Q.pop();
        rep[i]=p.first;
        switch(p.second)
        {
            case 2:Q.push(make_pair(p.first*2,2));
            case 3:Q.push(make_pair(p.first*3,3));
            case 5:Q.push(make_pair(p.first*5,5));
        }
    }
}
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    init();
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        int i=1;
        while(rep[i]<=n)//因为数字只有丑数与非丑数。
        {
            n++;
            i++;
        }
        printf("%d\n",n);
    }
    return 0;
}
阅读更多
个人分类: 优先队列
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

文章标题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭