問題の説明
醜い数字は、その唯一の素因数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.です" 。 }