n个不同整数中取k个数字,输出显示所有的组合,用c++写一下
时间: 2024-02-13 12:04:29 浏览: 70
好的,以下是用C++实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void generate_combinations(int n, int k, vector<int>& nums, vector<vector<int>>& res, vector<int>& curr, int start) {
if (curr.size() == k) {
res.push_back(curr);
return;
}
for (int i = start; i <= n; ++i) {
curr.push_back(nums[i-1]);
generate_combinations(n, k, nums, res, curr, i+1);
curr.pop_back();
}
}
int main() {
int n = 5;
int k = 3;
// 生成n个不同的整数
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
nums[i] = i+1;
}
// 获取所有长度为k的组合
vector<vector<int>> res;
vector<int> curr;
generate_combinations(n, k, nums, res, curr, 1);
// 输出所有组合
for (const auto& v : res) {
for (int num : v) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
这里使用了递归的方式来生成所有的组合,代码中`generate_combinations`函数的参数含义如下:
- `n`:总共有多少个数字;
- `k`:每个组合中包含多少个数字;
- `nums`:存储所有数字的vector,每个数字都不相同;
- `res`:存储所有组合的vector<vector<int>>,每个组合是一个vector<int>;
- `curr`:当前正在生成的组合;
- `start`:从哪个数字开始生成。
在函数中,如果当前正在生成的组合的长度等于k,就将它添加到res中;否则,从start开始,依次将nums中的数字添加到curr中,并递归生成下一个数字。
阅读全文