#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,x;
scanf("%d",&n);
scanf("%d",&x);
int *array;
array = (int*)calloc(n,sizeof(int));
for(int i = 0;i < n;i++)
{
scanf("%d",&array[i]);
}
int num = 0;//如果把sum放在这里,每次循环后又会初始化
for(int i = 0;i < (1<<n);i++)
{
int sum = 0;
for(int j = 0;j < n;j++)
{
if((i&(1<<j))>0)
{
sum += array[j];
}
}
if(sum == x)
{
num++;
}
}
free(array);
printf("%d",num);
return 0;
}
这题和李白喝酒的题的做法差不多。
本文介绍了一个使用C语言解决子集求和问题的程序。该程序通过位操作来遍历所有可能的子集组合,并检查这些子集是否满足特定的目标和。文章提供了完整的代码示例,展示了如何动态分配内存用于存储输入数组,如何通过位运算选择子集,以及如何统计并输出满足条件的子集数量。
1054

被折叠的 条评论
为什么被折叠?



