2007年11月17日 星期六

Problem 136 Ugly Numbers,難看的數字

這題要列出的數字,其因數只能有2, 3, 或 5,所以,數字一定是 2^x * 3^y * 5^z的組合,參考他的解答,我使用一個 minUgly(2*x, 3*y, 5*z, &idx)的方式,注意這裡的x,y,z必須也是Ugly number,所以就必須有個index將uglyNum陣列中的數字一個個叫出來。 &idx是告訴你三個中,哪一個最小,這時才能將x,y,或z換大一點的Ugly number。
注意:不要用//,這個註解會產生compilation error。

uglyNum[0] = 1;
while (i<1500)
{
min = minUgly(2*fac[0], 3*fac[1], 5*fac[2], &idx);
if (min>oldmin)
i++;
uglyNum[i] = min;
maxFac[idx]++;
fac[idx] = uglyNum[maxFac[idx]];
oldmin = min;
}

p136題目連結
回ACM題庫目錄
回首頁

4 則留言:

小小 提到...

數字應該是2^x*3^y*5^z吧˙ ˙ ...

liangk 提到...

Thanks, it's fixed.

小小 提到...

http://dorm.nsysu.edu.tw/~domon/pmwiki/index.php/Programming/ACM

x,y,z要為ugly number嗎˙ ˙ ?

我查到的資料前11項ugly number
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15

還是前幾項例外??

liangk 提到...

x,y,z 是 ugly number。

前 100個 ugly number為 1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50 54 60 64 72 75 80 81 90 96 100 108 120 125 128 135 144 150 160 162 180 192 200 216 225 240 243 250 256 270 288 300 320 324 360 375 384 400 405 432 450 480 486 500 512 540 576 600 625 640 648 675 720 729 750 768 800 810 864 900 960 972 1000 1024 1080 1125 1152 1200 1215 1250 1280 1296 1350 1440 1458 1500 1536