集合的幂集(C++)

Description

设S是有n(n≤20)个元素的集合,S的幂集是S所有可能的子集组成的集合。例如,S={a,b,c},则S的幂集={()(c)(b)(bc)(a)(ac)(ab)(abc)}。写一个C++递归程序,以S为输入,输出S的幂集。

Input

n(n≤20)的值以及S的n个元素

Output

S的幂集

Sample Input

3

abc

Sample Output

()(c)(b)(bc)(a)(ac)(ab)(abc)


分析:我们知道含有n个元素的集合它的子集一共有2的n次方个,这个方法如果用递归来做的话,考虑一下每次函数只输出一个子集的话,可以选择如下方法:设计一个具有n层递归的函数,每个递归函数则需要再包含两个递归原函数,分成两路,这样可以达到一共2的n次方的输出。如果用二叉树的思想来想这道题的话会更方便,每次把目标函数分成两个子问题,就像一颗二叉树一样。


本题也是本人在网上搜的,也搜集了同班同学的各种思想,自己再总结了一下,其中加上自己的一些理解,如有错误,请各位帮忙指出!

#include <iostream>
#include <cstring>
using namespace std;
char array[21];
void Func(int i,char *Temp)
{
	char reTemp[21];//这里需要设置另一个替换数组,因为如果if判断语句成立的话,就要输出Temp,如果Temp在下面的环节修改的话,那输出的集合也不是目标集合
	strcpy(reTemp,Temp);
	if(i==strlen(array))
	{
		cout<<"("<<Temp<<")";
		return ;
	}
	else
	{
		Func(i+1,reTemp);
		strncat(reTemp,(array+i),1);//这个函数是将第二个数组从第i个位置后将1位字符赋值到reTemp中
		Func(i+1,reTemp);
		/*本题最关键的也就是在这里讲一个函数递归成两个,第二个递归需要将第一个递归的数组reTemp附上新元素再递归,
		就像二叉树一样一直分支下去,直到return*/
	}
}
int main()
{
	int n;
	char Temp[21]={0};
	cin>>n>>array;
	Func(0,Temp);
	return 0;
}


 
 
 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值