在学习C++时遇到的一个问题:用递归实现一个集合全部子集的输出。
一开始感觉好难,虽然个数和思路很好想,有n个元素,就有2n个子集,0表示没有,1表示有。
但是如何用递归代码实现呢?
思路:类似于二进制字符串0表示不在子集中不输出,1表示在子集中可以输出。当所有字符的状态确定时输出子集。然后返回上一次不确定的字符改变它的状态,并让不确定的字符减一直至不确定的字符为0 为基本情况。
方法如下:

#include <iostream>
using namespace std;//递归实现求一个集合的全部子集
//思路:将字符串中的所有字符的状态看作0或1.
//template <class T>
void subset(int *p,int n,int len){//基本情况if (n==0){int j = 0;cout<<"{";for (int i = 0; i < len; ++i) {//用len来控制全部输出字符if (j!=0&&p[i]!=0){cout<<",";//控制,的输出}if (p[i]!=0){cout<<p[i];j++;}}cout<<"}"<<endl;return;}for (int j = 0; j <=1; ++j) {//每个元素都有0和1两种状态int *ch = new int[len];for (int i = 0; i < len; ++i) {ch[i] = p[i];//创建临时数组来储存p的所有值,确保还能输出元素的初始值}if (j==0){ch[n-1] = 0;//0表示元素不在该子集中}subset(ch,n-1,len);//判断剩下的n-1个字符是否在子集中}}

代码实现很简洁,但是具体实现并不太好想,还是要多练习递归,多看一些大佬的代码。

C++实现输出一个集合的全部子集相关推荐

  1. 输出一个集合的所有子集

    输出字符串的所有子集 如:对"abc" 输出:  c b bc a ac ab abc 第一种做法: 2^n 遍历每个字符,每个字符只能取或者不取.取就把该字符加入结果中,遍历完毕 ...

  2. 求一个集合的所有子集 Python实现

    求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...

  3. 求一个集合的所有子集

    题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}. 思路 实际上求子集问题是一个经典的DFS,每一次 ...

  4. 求一个集合的所有子集问题实现

    **问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...

  5. 求一个集合的所有子集问题

    一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...

  6. 枚举一个集合的所有子集

    一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0: for(int S0 = S; S0; S0 = (S0-1)&S){} 还有不包括S本身的: ...

  7. 给定一个集合,输出它的所有子集

    题目:集合是由大字字母(A-Z)组成的,要求输出集合的所有子集,每个子集一行,不能使用递归. 例如 "ABD"的子集: NULL(空集).A.B.C.AB.AC.BC.ABC(共8 ...

  8. java set子集_Java程序来检查一个集合是否是另一个集合的子集

    Java程序来检查一个集合是否是另一个集合的子集 在这个实例中,我们将学习Java中检查一个集合是否是另一个集合的子集. 要理解此示例,您应该了解以下Java编程主题: 示例1:使用HashSet类检 ...

  9. MATLAB用递归法求解集合子集,用递归法求一个集合的子集c语言,急!!!

    匿名用户 1级 2014-04-09 回答 给你个参考代码: #include <stdio.h> #define ARRAY_SIZE 5 //输出Buffer集合 void Outpu ...

最新文章

  1. 找不到请求的 .Net Framework 数据提供程序。可能没有安装
  2. Pycharm Matplotlib 图像不显示问题
  3. 死磕Synchronized底层实现--偏向锁
  4. [bzoj2882]工艺_后缀数组
  5. SpringMVC容器和Spring容器
  6. Go-json解码到接口及根据键获取值
  7. LeetCode 1910. 删除一个字符串中所有出现的给定子字符串
  8. 基于python的modbus协议编程_通往未来的网络可编程之路:Netconf协议与YANG Model
  9. 静态类型和动态类型的语言有什么区别?
  10. SPOJ Can you answer the Queries系列
  11. 学习笔记(六):C++串口连接
  12. Manjaro 安装 IC617
  13. c语言表达式判断语法错误题,大连理工大学C语言模拟题机房题库单选、判断、填空(分章节_共十一章)...
  14. 台式计算机品牌怎么查,教你怎么看电脑主板型号和品牌
  15. 权限维持篇---Windows权限维持--隐藏篇
  16. 奥鹏计算机19春在线作业,东师多媒体计算机技术19春在线作业2【标准答案】
  17. 按照分类方法判断图片里是否有鹅蛋
  18. JavaScript 内存溢出,内存泄漏
  19. 如何配置数据库带有下划线字段对应Java实体类属性(驼峰命名)
  20. dive into openstack ovn (by quqi99)

热门文章

  1. 右上角的引用文献格式_论文要引用的小符号右上角怎么打?
  2. 【Unity3D实战项目:疯狂杀戮】角色模型的行走控制(一)
  3. Python实现常见的排序算法
  4. 功能强大、多合一,Java性能调优VisualVM多合一工具
  5. 别再说自己不会了!2021年教你增加拿到BAT等大厂offer几率,醍醐灌顶!
  6. openpyxl更改字体类型、字体颜色
  7. Unity程序框架总结归置系列(4)——mono模块
  8. IOS APP获取证书、打包、发布蒲公英详解
  9. 计算机专业排名211大学排名,计算机专业大学排名,计算机专业强的211!
  10. jdjjsjsjhfshafhiehf