第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

丑數(shù)(Ugly Numbers, UVa 136)

標(biāo)簽:
C++

题目描述

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。

算法实现

  1. 版本1:错误版本

//#define LOCAL#include<iostream>#include<cstdio>#include<queue>/*
输出第1500个丑数
*/using namespace std;typedef long long LL;
const int coeff[3]={2,3,5};int main(){    
#ifdef LOCAL
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);    
    #endif

    priority_queue<LL,vector<LL>,greater<LL> > pq;//!1
    pq.push(1);//初始化得有1个1.
    for(int i=1;;i++){        //每次循环都从pq中取出一个丑数,根据这个丑数计算出新的丑数,并注入。
        LL ugly=pq.top();
        pq.pop();        
        if(i==1500){cout<<ugly;break;}        
        else{            //通过这个取出的丑数,计算新的丑数,并入队
            for(int i=0;i<3;i++){
                LL x=ugly*coeff[i];
                pq.push(x);
            }
        }
    }
}

以上思路是通过每次从优先队列pq中获取一个丑数,然后通过这个丑数计算出新的丑数,对于任意的丑数x,他的2,3,5倍也都是丑数,通过这样的方法,可以把所有的丑数一网打尽。
但是这个地方没有考虑周全的是,不同的生成方法可能会生成同一个丑数,所以里面肯定有许多次重复了,比如235=325=532=...,所以需要一个数据结构来记录丑数是不是已经出现过了,set集合挺适合的,那么修改代码后如下。

//#define LOCAL
#include<iostream>
#include<cstdio>
#include<queue>
#include<set>/*
输出第1500个丑数
*/using namespace std;typedef long long LL;const int coeff[3]={2,3,5};int main(){    
#ifdef LOCAL
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);    
    #endif

    priority_queue<LL,vector<LL>,greater<LL> > pq;//!1
    set<LL> s;
    pq.push(1);//初始化得有1个1.
    s.insert(1);    
    for(int i=1;;i++){        //每次循环都从pq中取出一个丑数,根据这个丑数计算出新的丑数,并注入。
        LL ugly=pq.top();
        pq.pop();        if(i==1500){cout<<ugly;break;}        
        else{            //通过这个取出的丑数,计算新的丑数,并入队
            for(int i=0;i<3;i++){
                LL x=ugly*coeff[i];               
                 if(!s.count(x)){
                    s.insert(x);
                    pq.push(x);
                }
            }
        }
    }    return 0;
}

keep going

作者:MarkKobs

原文链接:https://www.cnblogs.com/MarkKobs-blog/p/10460342.html


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消