写一个递归函数枚举n个数x1⋯xn中取若干个数的每种方法子集枚举 对每种方法把取出的数从小到大排序若两种方法中前k−1个数的选取情况相同则取了第k个数的在前 例如对n=4X=1002034应该按如下顺序给出结果10020341002031002041002010034100310041002034203204203434输入第一行一个正整数n第二行n个正整数 x1⋯xn输出输出2n行 每行一个子集
#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;
}
``
原文地址: https://www.cveoy.top/t/topic/izGS 著作权归作者所有。请勿转载和采集!