将此代码(原先是输出所有子集) 改成:给定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;
}
有用请采纳
#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();
}