求解幂集问题

对于给定的正整数n(1<=n<=10),求1~n构成的集合的所有子集(幂集)。

输入格式:

输入1个整数n。

输出格式:

输出1~n构成的集合的所有子集(幂集),一个集合占一行,集合的元素用{}括起来,元素之间用逗号分隔,最后1个元素后面没有逗号

样例">输入样例:

在这里给出一组输入。例如:

3

输出样例:

在这里给出相应的输出。例如:

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

 

 以题目n=3为例:
1,2,3的初始状态都设为0,
如果对应状态为1,那么置为0;如果对应状态为0,那么置为1,并跳出循环。
判断状态为1的输出。
这是根据输出样例得出的规律,按样例表示为:
{},000,需要提前输出
{1},100
{2},010
{1,2},110
{3},001
{1,3},101
{2,3},011
{1,2,3},111

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[11]={0},n,i,j,cnt;
    cin>>n;
    cout<<"{}"<<endl;
    for(i=1;i<pow(2,n);i++){
         cnt=0;
        for(j=1;j<=n;j++){
            if(a[j]==1) a[j]=0;
            else{
                a[j]=1;
                break;
            }
        }
        cout<<'{';
        for(j=1;j<=n;j++){
            if(a[j]==1){
                if(cnt!=0)cout<<",";
                cout<<j;
                cnt++;
            }
        }
        cout<<"}"<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河欲转。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值