给定数字范围和个数,请打印所有的排列。使用C++实现
时间: 2023-12-03 22:46:01 浏览: 69
queue-link.zip_C++队列_打印 队列_队列
可以使用递归解决这个问题。递归函数的参数包括:当前已经生成的排列、数字范围、还需要生成的数字个数。
以下是C++的代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
void printPermutations(vector<int>& permutation, int range, int left) {
if (left == 0) { // 如果已经生成了需要的数字个数,输出当前排列
for (int i = 0; i < permutation.size(); i++) {
cout << permutation[i] << " ";
}
cout << endl;
return;
}
for (int i = 1; i <= range; i++) { // 枚举可选数字
bool used = false;
for (int j = 0; j < permutation.size(); j++) { // 判断该数字是否已经被使用过
if (permutation[j] == i) {
used = true;
break;
}
}
if (!used) { // 如果该数字没有被使用过,将其加入当前排列中
permutation.push_back(i);
printPermutations(permutation, range, left - 1);
permutation.pop_back(); // 回溯
}
}
}
int main() {
int range, num;
cout << "请输入数字范围和个数:" << endl;
cin >> range >> num;
vector<int> permutation;
printPermutations(permutation, range, num);
return 0;
}
```
运行程序后,输入数字范围和个数,即可输出所有的排列。例如,当数字范围为3,数字个数为2时,输出结果为:
```
1 2
1 3
2 1
2 3
3 1
3 2
```
阅读全文