当前位置: 首页> 教育> 培训 > 求整数数组的子集【C语言】

求整数数组的子集【C语言】

时间:2025/7/11 19:52:07来源:https://blog.csdn.net/m0_65146517/article/details/140334975 浏览次数:0次

方法1:通过二进制位,因为n个整数数组的子集有2的n次方个,例如整数数组为{1,2,3},子集有2的3次方,8个;

期望的输出形式

其中需要了解关注的是

n&1判断最低位是否有数。如果一个子集为{2},利用二进制位2&1让其最低位空出来,依次类推。

n>>1结果是n/2

将n&1与n>>1结合就可以得到

若n=3(011); n&1=1 其最低位可以得到,n>>1 = 1;其次低位可以低到,

可以通过下面代码解读

#include <stdio.h>
​
int main(int argc, char const *argv[])
{int n=3;int str1[3]={1,2,3}; // 定义一个数组int str2[3]={0};for (int i = 2; i >= 0; i--){if(n&1)    // i=2 n=3 n&1=1 ; i=1 n=1 n&1=1 ; i=0 n=0 n&1=0{str2[i]=str1[i];// str2[2]=str1[2] ;str2[1]=str1[1] ; }n >>= 1; // n=1 n=0}for (int i = 0; i < 3; i++){printf("%d ",str2[i]); // str2[2]=str1[2] ;str2[1]=str1[1] ; str[0]未被赋值}return 0;
}
​

此时得到了

以上述思想求整数数组的子集

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
​
int main(int argc, char const *argv[])
{int nums[3] = {1,2,3};int numsSize = 3;int num = pow(2,numsSize);int **returnColumnSizes;returnColumnSizes = (int**)malloc(sizeof(int*)*num);for(int i = 0; i < num; i++)  {returnColumnSizes[i] = (int*)malloc(sizeof(int)*numsSize);} for(int i = 0; i < num; i++){for(int j = 0;j < numsSize; j++){returnColumnSizes[i][j] = 0;}}   for(int i = 0; i < num; i++){for(int j = 0; j < numsSize; j++){returnColumnSizes[i][j]=0;printf("%d ",returnColumnSizes[i][j]);}printf("\n");}printf("---------\n");for(int i = 0; i < num; i++){int n=i;int k=0;while (n){if(n&1){returnColumnSizes[i][k]=nums[k];}n >>= 1;k++;}}printf("---------\n");for(int i = 0; i < num; i++){for(int j = 0; j < numsSize; j++){if(returnColumnSizes[i][j]==0){continue;}printf("%d ",returnColumnSizes[i][j]);}printf("\n");}}
​

本题本来打算写来回答力扣题78题求子集的,但是,才疏学浅,还是我不配。

最终结果将所有0都去掉了。

关键字:求整数数组的子集【C语言】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: