9 条题解

  • 0
    @ 2025-3-17 17:09:12
    #include <bits/stdc++.h>
    using namespace std;
    
    //递归函数
    void function_Permutation(vector<int>& arr, vector<int>&arrs, size_t start, size_t r, vector<vector<int>>& result) {
        //终止条件 动态数组arrs取了r个数时
        if ( arrs.size() == r ) {
            result.push_back(arrs);//把动态数组放在结果数组里面
            return;
        }
        for ( size_t i = start; i < arr.size(); i++ ) {
            arrs.push_back(arr[i]); //按顺序将每一个数字固定在arrs数组中
            function_Permutation(arr , arrs , i + 1 , r , result); // 递归深入处理选数字找位置(i+1)==》 start
            arrs.pop_back(); // 递归最深处后(代表最后一个数字有了并且存下了,那就删掉最后一个数字进入循环。
            //问题出在 arrs.pop_back(arr[i]) 这一行代码。std::vector::pop_back 是一个成员函数,
            //它的作用是移除向量的最后一个元素,但它不接受任何参数。然而,你在调用时错误地传入了一个参数 arr[i]。
        }
    }
    
    int main() 
    {
        int n,r;
        cin >> n >> r;
        //接收数组
        vector<int> arr(n);
        for ( int i = 0; i < n; i++ ) {
            cin >> arr[i];
        }
        //升序
        sort(arr.begin() , arr.end());
        //创建储存数组result 动态数组arrs
        vector<vector<int>> result;
        vector<int> arrs;
        //调用递归函数
        function_Permutation(arr, arrs , 0 , r , result); 
        //输出结果函数
        for ( const auto& nums : result ) {
            for ( int num : nums ) {
                cout << num << " ";
            }
            cout << endl;
        }
        return 0;
    }
    
    

    信息

    ID
    83
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    610
    已通过
    214
    上传者