尋找第n個醜數

2021-10-03 11:03:45 字數 1111 閱讀 1967

**實現

編寫乙個程式,找出第n個醜數。

乙個數的因子僅僅包括2,3,5的數稱為醜數。

說明1:數字1特別對待也看作是醜數。

說明2:從1開始的10個醜數分別為1,2。3。4,5,6,8,9。10。12。

該題理解的關鍵之處在於:從醜數分解出來的因子,一定是乙個醜數,即醜數一定是由醜數相乘得到的。所以,醜數的2,3,5倍均是乙個醜數。

所以該題的核心為:預設第乙個醜數是1,用第乙個醜數 1 做 1×2;1×3;1×5;從這三個數字中選擇乙個最小的即為第二個醜數,結果是2;然後分別求第乙個醜數和第二個醜數的2/3/5倍(除去已有的醜數2),取最小的作為第三個醜數;以此類推,求每個醜數的2/3/5倍,並作比較取最小的。

def

getuglynum

(index)

:if index <1:

return

0#預設第乙個醜數

res =[1

]#t2、t3、t5是醜數列表res的下標

t2 = t3 = t5 =

0 nextdex =

1while nextdex < index:

minnum =

min(res[t2]*2

, res[t3]*3

, res[t5]*5

)#注意:這裡是使用三個while迴圈,而不用if...else...

#當上述執行到第5步時,存在兩個元素的結果相同的情況

while res[t2]*2

<= minnum:

t2 +=

1while res[t3]*3

<= minnum:

t3 +=

1while res[t5]*5

<= minnum:

t5 +=

1 nextdex +=

1return res[nextdex-1]

print

(getuglynum(10)

)

執行結果如下所示:

12

尋找第1500個醜數

諾西筆試最後一道題,題意 把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。最普通 也最耗時 的做法是從1開始遍歷,然後判斷這個數的因式分解中只包含2,3,5,滿足則...

返回第n個醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。解法1 判斷某個數是否為醜數,連續找到第n個醜數 include using namespace std bool ...

找到第N個醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。找到第n個醜數 方法1 存放num之前所有元素是否是醜數的flag int getuglynumber solution in...