C++求第N个丑数的值

来源:互联网 发布:mysql压缩版安装图解 编辑:程序博客网 时间:2024/05/16 08:40

题目:
我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第N个丑数。习惯上将1作为第一个丑数。

思路:
丑数都是前面已有丑数乘以2、3或5生成的。假设已有丑数已按增序排列,那么下一个丑数一定是已有丑数分别乘以2、3、5得到的数中大于当前最大丑数中的最小的一个。

#include<iostream>#include<algorithm>#include<vector>  using namespace std;int GetUglyNumber_Seq(int index) {    vector<int> ugly(index, -1);    if (index <= 0)        return 0;    int idx2 = 0, idx3 = 0, idx5 = 0, i = 1;    ugly[0] = 1;    while (i<index)    {        int new2 = ugly[idx2] * 2;        int new3 = ugly[idx3] * 3;        int new5 = ugly[idx5] * 5;        int tempVal = min(min(new2, new3), new5);        if (tempVal == new2)            idx2++;        if (tempVal == new3)            idx3++;        if (tempVal == new5)            idx5++;        ugly[i] = tempVal;        i++;    }    return ugly[index - 1];}int main(){    int n = 0;    cin >> n;    int ret = GetUglyNumber_Seq(n);    printf("%d\n", ret);    return 0;}