c++代码所谓丑数,就是那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。为方便起见。将1也看作是丑数。 请编写一个程序寻找并打印第N个(N<200)个丑数。 输入 一个整数N (N<200) 输出 一个整数m
时间: 2024-04-18 07:23:25 浏览: 183
c实现的丑数
您好!以下是一个使用C++编写的程序,用于寻找打印第N个丑数:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int findNthUglyNumber(int n) {
std::vector<int> uglyNumbers(n);
uglyNumbers[0] = 1;
int factor2 = 0, factor3 = 0, factor5 = 0;
for (int i = 1; i < n; i++) {
uglyNumbers[i] = std::min({uglyNumbers[factor2] * 2, uglyNumbers[factor3] * 3, uglyNumbers[factor5] * 5});
if (uglyNumbers[i] == uglyNumbers[factor2] * 2)
factor2++;
if (uglyNumbers[i] == uglyNumbers[factor3] * 3)
factor3++;
if (uglyNumbers[i] == uglyNumbers[factor5] * 5)
factor5++;
}
return uglyNumbers[n - 1];
}
int main() {
int n;
std::cout << "请输入一个整数N:";
std::cin >> n;
int m = findNthUglyNumber(n);
std::cout << "第" << n << "个丑数是:" << m << std::endl;
return 0;
}
```
此程序使用动态规划的思想,通过维护三个指针(factor2、factor3、factor5)来生成丑数序列。每次选取这三个指针所指向的丑数乘以对应的因子中最小的值,作为下一个丑数。最后返回第N个丑数m。
希望对您有所帮助!如果还有其他问题,请随时提问。
阅读全文