数组的子集

简介:

前言:

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

因为数组子集个数是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

相关文章
|
3月前
|
存储 算法 程序员
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
49 0
|
3月前
|
人工智能 算法 数据可视化
【算法训练-数组 五】【数组组合】:下一个排列
【算法训练-数组 五】【数组组合】:下一个排列
36 0
|
3月前
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
32 0
|
C++
计算一个数组的子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
50 0
|
存储 Python
Python实现划分数组为连续数字的集合
Python实现划分数组为连续数字的集合
92 0
数组与矩阵——3.数组中重复的数字
数组与矩阵——3.数组中重复的数字
|
存储 算法
将数组a中数据元素实现就地逆置的算法
给出将整型数组a中数据元素实现就地逆置的算法。所谓就地逆置,就是利用数组a原有空间来存放数组a中逆序排放后的各个数据元素。
278 0
|
安全 索引
数组、列表和序列
数组、列表和序列
103 0
|
开发工具
数组的子集能否累加出K
数组的子集能否累加出K
数组的子集能否累加出K