m0_64833482 2021-12-10 12:23 采纳率: 55.6%
浏览 31
已结题

看看应该怎么改 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);

}

  • 写回答

2条回答 默认 最新

  • 五一编程 2021-12-10 13:01
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办