子集生成(二进制法)
输出子集s对应的各个元素
void print_subset(int n. int s) {//打印{0,1,2...n-1}的子集s for(int i = 0; i < n; i++) if(s & (1<
枚举子集
for(int i = 0; i < (1<
枚举比x大的最小数,比x小的最大数
#include#include int n, X, ans;int a[111]; int main() { scanf("%d", &n);//n: a1 a2 a3 a4 。。 for(int i = 1; i <= n; i++) scanf("%d", &a[i]); scanf("%d", &X); for(int i = 0; i < (1 << n); i++) {//最大值 == 2的n - 1 次方 int tmp = 0; for(int j = 1; j <= n; j++) { if(i & (1 << j - 1)) {//当这个式子 != 0 时 说明 找到 tmp += a[j]; }// if((i >> j - 1) & 1) } if(tmp == X) ans++; } printf("%d\n", ans); return 0;}