醜い番号UVA - 136(プライオリティキュー+ベクター)

問題の説明

醜い数字は、その唯一の素因数2、3または5である数です。

シーケンス1、2、3、4、5、6、8、9、10、12、15、...は、最初の11の醜い番号を示しています。

慣例により、1が含まれています。

1500'th醜い番号を検索して印刷するプログラムを書きます

入力

このプログラムへの入力はありません。

出力

計算された数値に置き換え「<番号>」と、以下に示すように、出力は、単一のラインで構成すべきです。

SampleOutput

1500'th醜い数は、<番号>

効果の件名:

これは、他よりも2,3,5素数の数で割り切れない醜いの数を指します。大きな醜い小規模の数が並ん

結果は以下の通りであります: 

1,2,3,4,5,6,8,9,10,12,15、...

最初の醜い番号1500を探しています

アイデア:

それは確かに一般的に暴力を解決するT 我々は、すべての(=゚・゚=)テクノニャー♪ヾターンの外に話す知っているべき、long long型の必要性であるので、我々は、最適化されるようにプライオリティキューを使用することができ、に注意を払います。

具体的にコードを見て:

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <キュー> 
の#include <ベクトル>
 使用して 名前空間はstd;
#defineは長い長いっ
 のconst  int型 MAXX = 1501 ;
INT メイン()
{ 
    LL、B、C。
    // 优先队列 
    PRIORITY_QUEUE <LL、ベクトル<LL>、大きな<LL>> Q。
    q.push(1)。// 初始化为1。
    int型 NUM = 0 ; // 计数。
    ANS LL;
    一方、(NUM < MAXX)
    { 
        ANS =q.top(); 
        q.pop(); 
        NUM ++ ;
         IF(NUM == 1500 
        { 
            のprintf(" 醜い1500'thのはIS数%D \ N-。" 、ANS);
             BREAK ; 
        } 
        // もしANS * ANS、3 * ANS、次いで、2醜い 5 * ANSは醜い数であり; 
        A * ANS = 2 ; 
        B = * ANS 3 ; 
        C = * ANS 5。;
          // BまたはC、同数の場合係数b、またはcの特定の数に現れ関係、
         // ためにB又はCの大きい比
        IF((%。5)&&(%。3))
        { 
            q.push(A)。
        } 
        もし、((B%5 ))
        { 
            q.push(B)。
        } 
        q.push(C); 
    } 
    戻り 0 
}

 別のそのような操作は、以下のO(゚Д゚)っ漢です!すでに結果を知っている提供:

書式#include <iostreamの>
 使用して 名前空間はstdを、
INT メイン()
{ 
    COUT << " 1500'th醜い数をn \ 859963392.です" 
}

 

おすすめ

転載: www.cnblogs.com/dwj-2019/p/11355944.html