- 题目描述:
-
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- 输入:
-
输入包括一个整数N(1<=N<=1500)。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出第N个丑数。
- 样例输入:
-
3
- 样例输出:
-
3 此题用构造的办法求解,有三个指针,指向*2,*3,*5的数,每回取最小的结果加入到丑数的集合中去 代码如下:
1 #include
2 #include 3 #include 4 #include 5 #include 6 #include 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 }