使用归纳法,生成数组1,2...n的所有排列。 【输入形式】输入1行包含1个整数n。 【输出形式】输出包含若干行,每行表示1个排列方式,每行排列数字之间使用空格分割。可以按照任意顺序输出。c++编程
时间: 2024-09-22 14:07:19 浏览: 34
在C++中,我们可以使用递归的方式来实现生成数组1到n的所有排列,这通常涉及到回溯算法。这里是一个简单的示例代码:
```cpp
#include <iostream>
#include <vector>
void permute(std::vector<int>& nums, int start) {
if (start == nums.size()) { // 所有元素已排列完成,打印结果
for (int num : nums)
std::cout << num << " ";
std::cout << "\n";
} else {
for (int i = start; i < nums.size(); ++i) { // 尝试将当前元素放在起始位置
std::swap(nums[start], nums[i]);
permute(nums, start + 1); // 继续对剩余元素进行排列
std::swap(nums[start], nums[i]); // 回溯,恢复原状态
}
}
}
int main() {
int n;
std::cin >> n;
std::vector<int> nums(n);
for (int i = 0; i < n; ++i)
nums[i] = i + 1;
permute(nums, 0);
return 0;
}
```
这个程序首先创建一个大小为n的向量nums,并填充从1到n的整数。然后通过`permute`函数,从第一个元素开始,尝试将其与其他未排序的元素交换位置并递归地处理剩下的部分,直到所有元素都被放置过。最后会输出所有可能的排列。
阅读全文