数组的子集

简介:

前言:

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

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

相关文章
|
5月前
|
存储 Java
Java数组07:稀疏数组
【8月更文挑战第23天】
40 2
|
8月前
|
人工智能 算法 数据可视化
【算法训练-数组 五】【数组组合】:下一个排列
【算法训练-数组 五】【数组组合】:下一个排列
60 0
|
8月前
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
56 0
|
存储 C#
C#视频—浅谈数组与集合的差别
C#视频—浅谈数组与集合的差别
|
C++
计算一个数组的子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
70 0
|
存储 算法 容器
Leetcode 76最小覆盖子串&77组合&78子集
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
125 0
Leetcode 76最小覆盖子串&77组合&78子集
(转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
背包问题。     不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法:     只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。
659 0
|
开发工具
数组的子集能否累加出K
数组的子集能否累加出K
数组的子集能否累加出K
|
机器学习/深度学习
954. 二倍数对数组 : 「逐个构造」&「成组构造」&「拓扑排序」
954. 二倍数对数组 : 「逐个构造」&「成组构造」&「拓扑排序」

热门文章

最新文章