题目描述
给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和。
输入格式
集合中的元素(元素<=1000)
输出格式
和
代码
首先,直接暴力计算肯定行不通,需要用公式计算。
元素个数为n的数组所有子集个数为2^n个,要找一个元素出现的次数肯定不好找,那么就拿总的个数减去没有这个元素的子集个数(也就是 2(n-1)个),所以每个元素出现的次数就等于2(n-1)。那么就需要拿数组和乘以2^(n-1)。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[30],i=0;
long s=0;
while(cin>>a[i]){
s+=a[i];
i++;
}
s*=pow(2,i-1);
cout<<s;
return 0;
}