九度oj 题目1214:丑数
- 题目描述:
-
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- 输入:
-
输入包括一个整数N(1<=N<=1500)。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出第N个丑数。
- 样例输入:
-
3
- 样例输出:
-
3
此题用构造的办法求解,有三个指针,指向*2,*3,*5的数,每回取最小的结果加入到丑数的集合中去
代码如下:1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 8 #define min 1502 9 10 using namespace std; 11 int chou[min]; 12 int t[4]; 13 14 int main(int argc, char const *argv[]) 15 { 16 chou[1] = 1; 17 int m = 2; 18 t[1] = t[2] = t[3] = 1; 19 20 while(m < 1502) { 21 int tmp1 = chou[t[1]] * 2; 22 int tmp2 = chou[t[2]] * 3; 23 int tmp3 = chou[t[3]] * 5; 24 int mini = 1, mint = tmp1; 25 if(mint > tmp2) { 26 mint = tmp2; 27 mini = 2; 28 } 29 if(mint > tmp3) { 30 mint = tmp3; 31 mini = 3; 32 } 33 if(mint != chou[m-1]) { 34 chou[m++] = mint; 35 } 36 t[mini]++; 37 } 38 int n; 39 while(scanf("%d",&n) != EOF) { 40 printf("%d\n",chou[n]); 41 } 42 return 0; 43 }