数组的子集

简介:

前言:

博主实力有限,博文有什么错误,请你斧正,非常感谢!

因为数组子集个数是2^n
这和n位二进制的所有排序结果个数(2^n)相同,另外数组中的数在所有子集中只有在,与不在==2种情况==。因此将 1表示为 存在0表示 不存在

int arr [4]={1,2,4,5};

0 0 0 0代表空子集

0 1 0 1 代表子集{1,4}

1 1 1 1代表子集{1,2,4,5}

void  show(int* p, int x, int sz)
{

    int i = 0;//用于记录位数
    int j = 0;
    int arr[100] = { 0 };
    for (i = 0; i < sz; i++)
    {
        if (1 & x)//判断x的二进制补码与1 按位与 是否为1,为1这该位存在数。
        {
            arr[i] = p[i];
        }
        x = x >> 1;//对x的二进制补码右移1位,便于下次循环进行与 1  按位与&
    }

    //打印该子集
    printf("{");
    for ( j = 0; j < sz; j++)
    {
        if (arr[j])
        {
            printf("%d ", arr[j]);
        }
    }
    printf("}\n");

}

void Part_board(int* p, int sz)
{

    int i = 0;
    for (i = 0; i < pow(2, sz); i++)//全1的情况与pow(2,sz)无关。
    {
        show(p, i, sz);
    }

}

int main()
{
    int arr[] = { 1,-2,3,5 };
    int sz = sizeof(arr) / sizeof(*arr);
    Part_board(arr, sz);

}

image-20210820215115737

相关文章
|
编解码
项目实战——Qt实现FFmpeg音视频转码器(二)
项目实战——Qt实现FFmpeg音视频转码器(二)
303 0
|
C语言 索引
09-iOS之load和initialize底层调用原理分析
09-iOS之load和initialize底层调用原理分析
226 0
【Python操作基础】——帮助文档
【Python操作基础】——帮助文档
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
3458 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
机器学习/深度学习 算法 数据处理
盘点四种计算数组中元素值为1的个数的方法
盘点四种计算数组中元素值为1的个数的方法
379 0
|
安全 Java 关系型数据库
保险业务管理系统|基于JavaWeb保险业务管理系统的设计与实现(一)
保险业务管理系统|基于JavaWeb保险业务管理系统的设计与实现
359 1
|
人工智能 Python
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
789 0
|
Python
计算小于或等于n的非负整数区间包含的1的数量
计算小于或等于n的非负整数区间包含的1的数量
189 0
SAP ABAP——数据类型(四)【TYPE系列关键字】
本文主要介绍一下SAP ABAP中的声明数据类型的TYPE系列关键字,主要包括了TYPE、TYPE TABLE OF、TYPE LINE OF、TYPE REF TO
1239 0
SAP ABAP——数据类型(四)【TYPE系列关键字】
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
197 0