求子集PHP,#436. 求子集

【题目描述】:

监狱里除了修罗王以外,其他的囚犯都喜欢拉帮结派以壮大势力,但拉帮结派并不是无原则的,而是要看发展对象是不是看上去够顺眼,所谓顺眼,即是发展对象拥有的一些个性特征符合帮派的要求。例如N=3,表示符合帮派的个性特性共有3个,假设以a、b、c定义,我们称(a,b,c)为集合S,而发展对象只要拥有其中的一个或多个特征都会被帮派选中,即符合子集(S)={(),(a),(b),(c),(a,b),(b,c),(a,c),(a,b,c)}中的任何一个均可。当然,你可能要问了,这空集没有任何特征也符合条件?对啊,“和光同尘”也是一种很受大家欢迎的生活态度啊。

现输入N,求(S)的子集。

【输入描述】:

一个整数即N。

【输出描述】:

按字典序输出所有子集,每个子集占一行。

【样例输入】:3

【样例输出】:()

(a)

(ab)

(abc)

(ac)

(b)

(bc)

(c)

【时间限制、数据范围及描述】:

时间:1s 空间:64M

30%的数据:N<=6

50%的数据:N<=15

100%的数据:0<=N<=21

#include

#include

#include

#include

using namespace std;

int n;

char a[21];

void dfs(int aa,int s) {

if(s==n){return;}

for(int j=aa+1;j<=n;j++){

a[s+1]='a'+j-1;

printf("(");

for(int k=1;k<=s+1;k++){

printf("%c",a[k]);

}

printf(")\n");

dfs(j,s+1);

}

}

int main() {

scanf("%d",&n);

printf("()\n");

for(int i=1; i<=n; i++) {

a[1]='a'+i-1;

printf("(%c)\n",'a'+i-1);

dfs(i,1);

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值