使用递归函数,输出n个元素的所有子集
题目描述:
请编写一个递归函数,用来输出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个元素的所有子集的更多相关文章
- 使用递归函数用来输出n个元素的所有子集(数据结构、算法与应用)
例如,三个元素的集合A = {a,b,c}的所有子集是:空集a,b,c,ab,ac,bc,abc,共八个 分析: 对于集合A中的每个元素,在其子集中都可能存在或者不存在,所以A的子集有23种. 可以设 ...
- 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素
//求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...
- C++递归求解N个元素的所有子集
C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...
- python利用递归函数输出嵌套列表的每个元素
1.先用 for 循环取. for item in l: if isinstance(item ,list): for newitem in item: print(newitem) else: pr ...
- python(序列递归)【输出原子级别元素。。。】
晚上回去复习下原来的资料,返现Codebook中有个关于“展开一个嵌套序列”的话题. 任务说明:序列中的子项可能是序列,子序列的子项仍可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一 ...
- 编写3个不同版本的程序,令其均能输出ia的元素
#include<iostream> #include<vector> #include<string> using namespace std; int main ...
- python 输出所有列表元素的乘积
def multiply_list(items): tot = 1 for x in items: tot *= x return tot print(multiply_list([1,2,-8]))
- PHP 循环输出多重数组元素
<?php $arr = array( array( array( array( array( ,, ) ) ), array( ,,) ) ), array(, , ) ); function ...
- c++算法应用 预备
章 C + +程序设计 大家好!现在我们将要开始一个穿越" 数据结构.算法和程序" 这个抽象世界的特殊旅程,以解决现实生活中的许多难题.在程序开发过程中通常需要做到如下两点:一是高 ...
随机推荐
- ORM 关键
1. 老师的增删改查 1. teacher_obj.cid.add(*[1, 2, 3]) 添加(必须打散) 2. teacher_obj.cid.set([1, 2, 3]) 设置(不用打散) 2. ...
- NGINX 配置文件配置url重写
1.项目在根目录: location / { index index.html index.htm index.php l.php; autoindex ...
- 21天学通C++_Day3_Part1
今天奔跑吧兄弟来杭电了,决定不去看,宅在科协继续啃(反正去了也看不到咯),继续继续,今天白天没课,希望可以更两个. 0.C风格字符串 在数组中间把某个字符替换成‘\0’并不会改变数组的长度,但是显示时 ...
- Spring中的c3p0配置
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51162560 今天,我们就来详细谈谈Spring中的c3p0配置问题,好了,不耽搁 ...
- manyToManyField理解和用法
转:http://www.cnblogs.com/linxiyue/p/3667418.html
- 编程实现从hadoop上下载
下载 package hadoopTest; import java.io.File; import java.io.IOException; import org.apache.hadoop.con ...
- 从JVM的角度解析String
1. 字符串生成过程 我们都知道String s = "hello java";会将“hello java”放入字符串常量池,但是从jvm的角度来看字符串和三个常量池有关,clas ...
- lnmp php7 安装mysqli扩展 undefined function mysqli_connect()
在用ci框架的时候, https://blog.csdn.net/zqtsx/article/details/8746497 https://blog.csdn.net/move_now/articl ...
- ALTERA DDRII IP核使用
提到DDRII,大家应该都不陌生,DDRII SDRAM是第二代双倍速率同步动态RAM.今天小编给大家介绍一下QUARTUS II 下调用DDRII软核. 新建QUARTUSII工程之后,在tool下 ...
- org/apache/hadoop/hbase/mapreduce/TableReducer:Unsupported major.minor version52.0
问题详情: 问题原因: <dependency> <groupId>org.apache.hbase</groupId> <artifactId& ...