输出N个数的有重复全排列C++
时间: 2024-01-28 15:03:22 浏览: 100
输出n个数字的全排列(可重复)
4星 · 用户满意度95%
以下是一个简单的C++程序,用于输出具有重复元素的N个数的全排列:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void permute(vector<int> nums, int l, int r) {
if (l == r) {
for (int i = 0; i <= r; i++) {
cout << nums[i] << " ";
}
cout << endl;
}
else {
for (int i = l; i <= r; i++) {
if (i != l && nums[i] == nums[l]) continue; // 去重
swap(nums[l], nums[i]);
permute(nums, l+1, r);
}
}
}
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
vector<int> nums(n);
cout << "Enter the elements: ";
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end()); // 排序以便去重
permute(nums, 0, n-1);
return 0;
}
```
该程序首先接受用户输入N以及N个数字。然后,它对数字进行排序以便于去重,并调用`permute`函数来输出全排列。`permute`函数使用递归来生成全排列。在每次递归中,它交换数字的位置来生成新的排列,并在到达数组末尾时输出该排列。请注意,我们使用了一个额外的if语句来避免生成相同的排列。
阅读全文