用c++代码实现打印n个数中任意m个数的组合
时间: 2023-11-28 16:48:41 浏览: 125
以下是使用递归实现的C++代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
void combine(vector<int>& nums, vector<int>& temp, int start, int m) {
if (m == 0) {
// 输出当前组合
for (int i = 0; i < temp.size(); i++) {
cout << temp[i] << " ";
}
cout << endl;
return;
}
for (int i = start; i <= nums.size() - m; i++) {
temp.push_back(nums[i]);
combine(nums, temp, i + 1, m - 1);
temp.pop_back();
}
}
int main() {
int n, m;
cin >> n >> m;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
vector<int> temp;
combine(nums, temp, 0, m);
return 0;
}
```
该代码中,首先输入总共有n个数,需要选择m个数进行组合。然后使用一个大小为n的vector来存储所有的数,再使用一个大小为m的vector来存储当前选中的组合。接着,使用递归的方式,从start开始枚举所有可能的数字,将其加入组合中,然后继续递归,从下一个数字开始选取,直到选完m个数字为止。在选完m个数字后,输出当前组合并返回上一层递归。
需要注意的是,在每一层递归中,由于已经选取了一些数字,因此i的上限是nums.size() - m,以保证选完当前数字后,还有足够的数字可以选择。同时,在选完当前数字后,需要将其从组合中移除,以便下一次递归可以选取新的数字。
阅读全文