设计一个产生1~n的全排列的c++程序
时间: 2024-10-17 20:03:41 浏览: 40
设计一个C++程序生成1到n的全排列(permutations)可以通过递归或迭代的方式实现。这里提供一个使用递归的简单方法:
```cpp
#include <iostream>
#include <vector>
// 用于记录当前处理的位置
int current = 0;
// 交换两个元素的函数
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
// 生成下一个排列的递归函数
void generatePermutation(std::vector<int>& nums, int n) {
if (current == n) { // 如果已经处理到最后一个数,输出并回溯
for (int num : nums) {
std::cout << num << " ";
}
std::cout << "\n";
return;
}
for (int i = current; i < n; ++i) { // 从剩余未处理的数中选择一个作为下一位
swap(nums[current], nums[i]); // 把选择的数放在当前位置
current++; // 前进一位
generatePermutation(nums, n); // 继续生成下一个位置的排列
// 回溯:当递归结束时,把刚刚移动的数放回原位
swap(nums[current], nums[i]);
current--; // 回溯一步
}
}
int main() {
int n;
std::cout << "请输入数字范围的上限 (1 <= n <= 10): ";
std::cin >> n;
std::vector<int> nums(n);
for (int i = 0; i < n; ++i) {
nums[i] = i + 1;
}
std::cout << "全排列结果:\n";
generatePermutation(nums, n);
return 0;
}
```
当你运行这个程序并输入一个数字,比如5,它会输出1到5的所有可能排列。
阅读全文