题目描述:

请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.

解题思路:

根据子集的定义,集合中的每一个元素在子集中都有两种状态:‘1’表示出现,'0'表示不出现;如果所有的元素都不出现,则该子集是空集,如果所有的元素都出现,则该子集是全集。

我们定义一个标记数组tag,用于记录集合中对应的元素是否出现,每层遍历对应集合中的每个元素,都有出现(为‘1’)和不出现(为‘0’)两种可能,一直遍历到所有的元素的可能都标记完,然后根据数组函数输出结果。

程序代码:

#include <iostream>
using namespace std;
void build(char *str,int *tag,int n)
{
if(n==5)
{
cout<<"{";
for(int i=0;i<5;i++)
if(tag[i]==1)
cout<<str[i];
cout<<"}"<<endl;
return;
}
tag[n] = 0;
build(str,tag,n+1);
tag[n] = 1;
build(str,tag,n+1);
}
int main()
{
char a[5]={'a','b','c','d','e'};
int tag[5];
build(a,tag,0);
return 0;
}

输出结果:

{}

{e}

{d}

{de}

{c}

{ce}

{cd}

{cde}

{b}

{be}

{bd}

{bde}

{bc}

{bce}

{bcd}

{bcde}

{a}

{ae}

{ad}

{ade}

{ac}

{ace}

{acd}

{acde}

{ab}

{abe}

{abd}

{abde}

{abc}

{abce}

{abcd}

{abcde}

一共有2^5 = 32个子集。

这是《数据结构与算法应用》中的一道课后题,看了作者的标准答案:http://www.mhhe.com/engcs/compsci/sahni/c1/E5.HTM

发现和我的思路是一样的,哈哈,英雄所见略同~

使用递归函数,输出n个元素的所有子集的更多相关文章

  1. 使用递归函数用来输出n个元素的所有子集(数据结构、算法与应用)

    例如,三个元素的集合A = {a,b,c}的所有子集是:空集a,b,c,ab,ac,bc,abc,共八个 分析: 对于集合A中的每个元素,在其子集中都可能存在或者不存在,所以A的子集有23种. 可以设 ...

  2. 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素

    //求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...

  3. C++递归求解N个元素的所有子集

    C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...

  4. python利用递归函数输出嵌套列表的每个元素

    1.先用 for 循环取. for item in l: if isinstance(item ,list): for newitem in item: print(newitem) else: pr ...

  5. python(序列递归)【输出原子级别元素。。。】

    晚上回去复习下原来的资料,返现Codebook中有个关于“展开一个嵌套序列”的话题. 任务说明:序列中的子项可能是序列,子序列的子项仍可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一 ...

  6. 编写3个不同版本的程序,令其均能输出ia的元素

    #include<iostream> #include<vector> #include<string> using namespace std; int main ...

  7. python 输出所有列表元素的乘积

    def multiply_list(items): tot = 1 for x in items: tot *= x return tot print(multiply_list([1,2,-8]))

  8. PHP 循环输出多重数组元素

    <?php $arr = array( array( array( array( array( ,, ) ) ), array( ,,) ) ), array(, , ) ); function ...

  9. c++算法应用 预备

    章 C + +程序设计 大家好!现在我们将要开始一个穿越" 数据结构.算法和程序" 这个抽象世界的特殊旅程,以解决现实生活中的许多难题.在程序开发过程中通常需要做到如下两点:一是高 ...

随机推荐

  1. 快排的python实现

    快排的python实现 #python 2.7 def quick_sort(L): if len(L) <= 1: return L else: return quick_sort([lt f ...

  2. 设计模式之组合(compose)模式

    树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题.组合模式通过一种巧妙的设计方案来使得用户可以一致性地处理整个树形 ...

  3. django的表与表之间的关系详细讲解

    转:http://www.cnblogs.com/feixuelove1009/p/5855295.html

  4. elasticsearch snapshot快照备份和恢复

    环境:mac   使用brew 安装elasticsearch   1.在 /usr/local/etc/elasticsearch/elasticsearch.yml 文件中配置快照地址     p ...

  5. mysql安装问题汇总

    操作系统:win7 mysql版本号:mysql 5.5(64位) 1.又一次安装mysql卡在最后一步过不去 问题描写叙述:第一次安装完mysql.使用jdbc写入的中文都是乱码.但已存在于数据库中 ...

  6. C#网络编程(同步传输字符串) - Part.2

    服务端客户端通信 在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据.端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可以在客户端与服务端之间 ...

  7. Oracle12c版64位客户端安装步骤(32位安装步骤一样)

    1.双击setup.exe文件 2.下一步 3.下一步   4.安装 5.完成

  8. 解决 Flask-sqlalchemy 中文乱码

    当在使用 flask-sqlalchemy 操作 mysql 数据库时中文乱码或者直接报错. 解决方法如下: from flask_sqlalchemy import SQLAlchemy db = ...

  9. ④SpringBoot之thymeleaf使用

    本文介绍SpringBoot使用的模板技术thymeleaf以及通过webJar进行前端资源的引入以及使用thymeleaf介绍简单说, Thymeleaf 是一个跟 Velocity.FreeMar ...

  10. PADS Router 虚焊盘显示怎么办?

    PADS Router 虚焊盘显示怎么办? 群里朋友有问不知道按了什么键,焊盘显示成以下这种,怎么还原? 解答比较简单,按个 T 就可以. 这个显示是有好处的,特别是焊盘有过孔时一眼就看到.