看看应该怎么改 c++

将此代码(原先是输出所有子集) 改成:给定1到n构成的集合,生成大小为k的所有子集合

比如n=4,集合为{1,2,3,4},大小为k=3的集合有{1,2,3},{1,2,4},{2,3,4}

输入n和k,用空格隔开

输出若干行,每行是一个大小为k的子集,用空格分开

如n=4,k=3输出

1 2 3

1 2 4

2 3 4
#include
#include

using namespace std;
vector subset;
int n;
void search(int k) {
if (k == n + 1) {
for (auto e : subset){
cout << e <<" ";
}
cout << endl;
return;
} else {
search(k+1);
subset.push_back(k);
search(k+1);
subset.pop_back();
}
}
int main() {

cin >> n ;
search(1);

}


#include <bits/stdc++.h>
using namespace std;

vector<vector<int> > ps; // 集合的集合

void Pset(int n) {
    vector<vector<int> > ps1; // 辅助的集合的集合
    vector<vector<int> >::iterator it;
    vector<int> s;
    ps.push_back(s); // 添加空集到 集合元素中
    for(int i = 1; i <= n; i++) {
        ps1 = ps;
        for(it = ps1.begin(); it != ps1.end(); it++)
            (*it).push_back(i); // ps1这个集合中的每个元素的末尾加i
        for(it = ps1.begin(); it != ps1.end(); it++) // 将ps1的每个集合的元素添加到集合ps中
            ps.push_back(*it);

    }
}

void dispps(int k) {
    vector<vector<int> >::iterator it;
    vector<int>::iterator sit;
    for(it = ps.begin(); it != ps.end(); it++) {
        if((*it).size() == k){
        cout << "{";
        for(sit = (*it).begin(); sit != (*it).end(); sit++){
            cout << *sit;
            if (sit + 1 != (*it).end())
            {
                cout<<",";
            }
        }
            
        cout << "}"<<endl;
        }
    }
    cout << endl;
}

int main() {
    int n, k;
    cout<<"请输入集合元素个数n:"<<endl;
    cin>>n;
    cout<<"请输入集合大小k:"<<endl;
    cin>>k;

    Pset(n);
    cout << "1~" << n << "的k个元素幂集为:"<<endl;
    dispps(k);
    return 0;
}

img

有用请采纳

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

class Solution{
public:
    vector<vector<int> > result; // 保存结果

public:
    void backTracking(int index, vector<int>& temp, int k, int n); // index是每次开始的位置, temp中保存这次遍历结果 
    void calRes(int n, int k);  // 计算相应的结果 
    void printRes();  // 输出结果    
};

void Solution::backTracking(int index, vector<int>& temp, int k, int n){
    if (temp.size() == k){
        result.push_back(temp);
        return;
    }
    
    for(int i = index; i <= n; i++){
        temp.push_back(i);
        backTracking(i + 1, temp, k, n);
        temp.pop_back();
    }
}

void Solution::calRes(int n, int k){
    vector<int> temp;
    backTracking(1, temp, k, n);
}

void Solution::printRes(){
    for(int i = 0 ; i < result.size() ; i ++){
        for(int j = 0 ; j < result[i].size() ; j ++)
            cout << result[i][j] << " ";
        cout << endl;
    }
}

int main(){
    Solution s = Solution();
    s.calRes(4, 3);
    s.printRes();
}