#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void subset(vector<int>& nums, vector<int>& temp, int index, int k) {
    if (index == nums.size()) {
        for (int i = 0; i < temp.size(); i++) {
            cout << temp[i] << " ";
        }
        cout << endl;
        return;
    }

    temp.push_back(nums[index]);
    subset(nums, temp, index + 1, k);

    temp.pop_back();
    if (temp.size() >= k - 1) {
        sort(temp.begin(), temp.end());
        subset(nums, temp, index + 1, k);
    }
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    vector<int> temp;
    for (int k = 1; k <= n; k++) {
        subset(nums, temp, 0, k);
    }

    return 0;
}
``
写一个递归函数枚举n个数x1⋯xn中取若干个数的每种方法子集枚举 对每种方法把取出的数从小到大排序若两种方法中前k−1个数的选取情况相同则取了第k个数的在前 例如对n=4X=1002034应该按如下顺序给出结果10020341002031002041002010034100310041002034203204203434输入第一行一个正整数n第二行n个正整数 x1⋯xn输出输出2n行 每行一个子集

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

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