PTA算法题:幂集-所有的子集

所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。

输入一个整数n(0<=n<=10)
输出由整数1~n构成的集合{1,2,3,...,n}的幂集。

输入格式:

整数n(0<=n<=10)

输出格式:

{1,2,3,...,n}的幂集,每行一个子集,子集不可重复,子集之间顺序以及子集元素之间顺序均不作要求。
子集输出格式:{x,x,x,..,x}(x表示子集中的元素)

输入样例1:

 输出样例1:

{}
{1}
{2}
{3}
{1,2}
{1,3}
{2,3}
{1,2,3}

 输入样例2:

0

 输出样例2:

{} 

#include <stdio.h>

void power_set(int *nums, int n) {
    if (n == 0) { // 空集
        printf("{}\n");
        return;
    }
    int subset[n-1];
    for (int i = 0; i < n-1; ++i) {
        subset[i] = nums[i+1]; // 生成由1~n-1构成的幂集
    }
    power_set(subset, n-1);
    int m = 1<<(n-1); // 由前面的幂集得到包含n的子集
    for (int i = 0; i < m; ++i) {
        printf("{%d", nums[0]);
        for (int j = 0; j < n-1; ++j) {
            if (i & (1<<j)) { // 判断第j位是否为1
                printf(", %d", nums[j+1]); // 将其对应的元素输出
            }
        }
        printf("}\n");
    }
}

int main() {
	int n;
    scanf("%d",&n);
    int nums[] = {1, 2, 3,4,5,6,7,8,9,10};
    power_set(nums, n);
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值