因子中仅仅包含2、3、5的数,称为丑数。比如说14,就不是丑数,因为因子包含7。
请输出所有丑数中的第n个丑数。
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int calc(int n)
{
int* data = new int[n + 1];
for (int i = 0; i < n + 1; i++)
{
data[i] = 0;
}
data[0] = 1;
int pMul_2 = 0;
int pMul_3 = 0;
int pMul_5 = 0;
int index = 0;
while (index < n)
{
index++;
int d = min(data[pMul_2] * 2, min(data[pMul_3] * 3, data[pMul_5] * 5));
data[index] = d;
while (data[pMul_2] * 2 == data[index])
{
pMul_2++;
}
while (data[pMul_3] * 3 == data[index])
{
pMul_3++;
}
while (data[pMul_5] * 5 == data[index])
{
pMul_5++;
}
}
return data[n - 1];
}
int main()
{
int i, n;
cin >> i;
// TODO write your code here
n = calc(i);
cout << n;
return 0;
}
本文介绍了一种高效算法,用于寻找序列中第N个仅包含因子2、3、5的丑数。通过动态规划方法,该算法能够避免重复计算,确保找到正确的丑数。代码使用C++实现,展示了完整的逻辑流程。
6258

被折叠的 条评论
为什么被折叠?



