展开
题目描述
给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和。
输入格式
集合中的元素(元素<=1000)
输入输出样例
输入 #1复制
2 3
输出 #1复制
10
说明/提示
子集为:
[] [2] [3] [2 3] 2+3+2+3=10
保证结果在10^18以内。
找规律
这是一个简单题,但是值得一说
第一种(c++):
c++在输入个数未知的情况下,想要输入数组
while(cin>>a[i++]); //这样写,提交可以,但是自己没法测试答案
有一个需要注意的地方是
pow(n,m)的返回值是浮点数double类型,所以在输出之前需要先计算再输出
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <queue>
#include <list>
using namespace std;
int a[100010];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long i=1,sum=0;
while(cin>>a[i])
{
sum+=a[i];
i++;
}
sum*=pow(2,i-2);
cout<<sum<<endl;
//cout<<sum*pow(2,i-2)<<endl;
return 0;
}
还是要普及一下python代码
import math
a = list(map(int,input("").split()))
s=sum(a)
x=len(a)-1
print(s*(2**x))