切換
舊版
前往
大廳
主題

ZeroJudge - f250: ugly ++ 解題心得

Not In My Back Yard | 2020-09-01 00:07:39 | 巴幣 0 | 人氣 154

題目連結:


題目大意:
第一列給定一正整數 t (0 < t ≦ 10 ^ 3),代表有 t 筆測試資料,每筆佔一列。每列給定一正整數 n (0 < n ≦ 10 ^ 4),求第 n 個醜數(Ugly Number)為何?

醜數,更常見的稱呼是正規數(Regular Number)、漢明數(Hamming Number)或是 5-光滑數(5-Smooth Number),代表一個數字的質因數只由 2 、 3 或是 5 組成。保證第 10000 個醜數 < 10 ^ 18。



範例輸入:
20
1
5
10
20
50
100
200
500
1000
1500
2000
3000
4000
5000
6000
7000
8000
9000
9500
10000


範例輸出:
1
5
12
36
243
1536
16200
937500
51200000
859963392
8062156800
278942752080
4701849845760
50837316566580
408146688000000
2636718750000000
14305114746093750
67947724800000000
141557760000000000
288325195312500000


解題思維:
可以藉由窮舉 (i, j, k) 數組,其表示一數 = 2 ^ i × 3 ^ j × 5 ^ k ,而 i 、 j 、 k ≧ 0 。窮舉方式可以用深度優先搜尋(Depth First Search),或是直接暴力搜尋 i 、 j 、 k 各自從 0 跑到 60 (也就是三層迴圈),然後剔除掉那些會大超過 10 ^ 18 的數字。

窮舉完所有可行的 (i, j, k) ,也就是所有的醜數之後,將所有窮舉出來的數字按照大小由小到大排序。接著對於每個輸入的 n 值,輸出第 n 個即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

心彩
以為這題是進階題 原來只是d129的範圍加大而已
2023-06-28 16:20:51

更多創作