使用C++模仿R语言的combn函数
以下是一个使用C++编写的模仿R语言的combn函数的示例代码:
#include <iostream>
#include <vector>
using namespace std;
// 递归函数,生成组合
void generateCombinations(vector<int>& nums, vector<int>& combination, vector<vector<int>>& result, int index, int k) {
if (k == 0) {
result.push_back(combination);
return;
}
for (int i = index; i < nums.size(); i++) {
combination.push_back(nums[i]);
generateCombinations(nums, combination, result, i + 1, k - 1);
combination.pop_back();
}
}
// combn函数
vector<vector<int>> combn(vector<int>& nums, int k) {
vector<vector<int>> result;
vector<int> combination;
generateCombinations(nums, combination, result, 0, k);
return result;
}
int main() {
vector<int> nums = {1, 2, 3, 4};
int k = 2;
vector<vector<int>> result = combn(nums, k);
for (const auto& combination : result) {
for (int num : combination) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
该示例中,我们首先定义了一个递归函数generateCombinations,用于生成组合。然后我们定义了combn函数,该函数接受一个整数数组和一个整数k作为参数,返回一个二维数组,表示数组中长度为k的所有组合。
在generateCombinations函数中,我们通过递归调用来生成所有可能的组合。我们使用一个循环来遍历数组中的每个元素,并将其添加到当前组合中,然后递归调用generateCombinations函数继续生成剩下的元素。当k为0时,表示已经生成了一个长度为k的组合,将其添加到结果中。
在main函数中,我们定义了一个整数数组nums和一个整数k,然后调用combn函数生成长度为k的所有组合,并将结果打印出来。
运行该代码,输出为:
1 2
1 3
1 4
2 3
2 4
3 4
这与R语言的combn函数的输出结果是一致的
原文地址: https://www.cveoy.top/t/topic/iqS4 著作权归作者所有。请勿转载和采集!