以下是一个使用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函数的输出结果是一致的

使用C++模仿R语言的combn函数

原文地址: https://www.cveoy.top/t/topic/iqS4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录