c++编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9),观察n逐步增大时程序的运行时间。 输入样例:3 输出样例:123 132 213 231 312 321
时间: 2024-10-17 18:10:09 浏览: 43
C++算法:第 N 位数字原理、源码、测试用例
在C++中,你可以使用递归回溯算法来生成给定范围内的正整数全排列。以下是一个简单的示例代码,它会计算并输出前n个正整数的全排列:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 递归函数,用于生成全排列
void permute(vector<int>& arr, int start, vector<int>& result) {
if (start == arr.size()) {
// 当所有元素都有序后,将结果添加到最终列表
result.push_back(arr);
} else {
for (int i = start; i < arr.size(); ++i) {
// 交换当前元素与起始位置元素
swap(arr[start], arr[i]);
// 递归地处理剩余元素
permute(arr, start + 1, result);
// 撤销交换,恢复原始顺序,以便尝试其他排列
swap(arr[start], arr[i]);
}
}
}
// 主函数
void printPermutations(int n) {
vector<int> arr(n), result;
for (int i = 0; i < n; ++i)
arr[i] = i + 1;
permute(arr, 0, result);
cout << "前" << n << "个正整数的全排列:\n";
for (const auto& permutation : result) {
for (int num : permutation)
cout << num << ' ';
cout << "\n";
}
}
int main() {
for (int n = 1; n <= 9; ++n) {
clock_t begin = clock();
printPermutations(n);
clock_t end = clock();
double time_spent = ((double)(end - begin)) / CLOCKS_PER_SEC;
cout << "当n = " << n << "时,程序运行时间为:" << fixed << time_spent << "秒\n";
}
return 0;
}
```
当你运行这个程序时,会看到输出的全排列,并记录下每次递归调用`printPermutations`函数时的时间,以显示随着n的增加,程序的运行时间。
阅读全文