PTA----字母子集合

最近刷题遇见一个不错的题,分享一下!

 

这题啥意思呢?先写一个数组存A-Z,输入一个数,输出它的所有子集(包括空集)如果输入3,代表A, B, C的所有子集,并用他们三个表示。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
void my_print(char a1[], int count)

{
    int i, j, tmp;
    int Sum = 1 << count;          // 子集合的个数
    for (i = 0; i < Sum; i++)
    {
        j = i;
        tmp = 0;
        printf("{");
        while (j)
        {
            if (j & 1)   //按位与运算
            {
                printf(" %c", a1[tmp]);   //打印字母
            }
            j >>= 1;
            tmp++;
        }

        printf(" }\n");
    }
}
int main()
{
    char a[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int num;
    scanf("%d", &num);
    my_print(a, num);

    return 0;

}

咱来具体看一下-------

输入2,那他的子集有 0(代表空集) ,A,  B,  AB四个对吧。

Sum代表子集个数,Sum=1<<2(1左移2)变成4,所以运行4次

同理,输入3和2的逻辑一模一样。 

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值