九度-題目1214:醜數
阿新 • • 發佈:2017-07-06
得到 方法 產生 include pac number return clu n)
http://ac.jobdu.com/problem.php?pid=1214
- 題目描述:
-
把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。
習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
- 輸入:
-
輸入包括一個整數N(1<=N<=1500)。
- 輸出:
-
可能有多組測試數據,對於每組數據,
輸出第N個醜數。
- 樣例輸入:
-
3
- 樣例輸出:
-
3
一開始的想法是遞增遍歷足夠多的數字,得到長度為1500的數組。數組中每個元素對應一個醜數。
這將產生問題:數組中靠後的一些元素是無法遍歷得到的,或者說非常不有效。
因此換一種方法:數組中的後一個元素必然是前面某個元素的2倍/3倍/5倍。每次只要獲得對應的元素即可。#include <iostream> using namespace std; int min3(int a, int b, int c){ int min=(a<b)?a:b; if(min>c) return c; else return min; } int getUglyNum(int index){ if(index<=0) return 0; int a[index]; a[0]=1; int idx1=0; int idx2=0; int idx3=0; for(int i=1; i<index; i++){ int min=min3(a[idx1]*2, a[idx2]*3, a[idx3]*5); a[i]=min; if(min==a[idx1]*2) idx1++; if(min==a[idx2]*3) idx2++; if(min==a[idx3]*5) idx3++; } return a[index-1]; } int main(){ int n; while(cin>>n){ int Ugly=getUglyNum(n); cout << Ugly << endl; } return 0; }
九度-題目1214:醜數