洛谷----P2415 集合求和

题目描述

给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和。

输入格式

集合中的元素(元素<=1000)

输出格式

输入输出样例

输入 #1复制

2 3

输出 #1复制

10

说明/提示

子集为:

[] [2] [3] [2 3] 2+3+2+3=10

保证结果在10^18以内。

思路:找规律,发现每个数字出现的次数与元素的个数有关,3个元素每个元素出现4次,4个元素每个元素出现8次-------》推出每个元素出现次数与元素个数的关系为2的n-1次方(n为元素个数)。

#include <iostream>
#include <math.h>
#include <algorithm>
#include <stack>
#include <string.h>
#include <vector>
#include <cstring>
using namespace std;
long long  n,m=0,sum=0;
int a[1005];
int main() {
    while(scanf("%d",&n)!=EOF)
    {
        a[m++]=n;
    }
    //cout<<m<<endl;
    for(int i=0;i<m;i++)
    {
        sum+=(a[i]*pow(2,m-1));
    }
    cout<<sum<<endl;
    return 0;
}
//1
//2
//3
//4
//1 2
//1 3
//1 4
//2 3
//2 4
//3 4
//1 2 3
//1 2 4
//1 3 4
//2 3 4
//1 2 3 4
经验分享 程序员 微信小程序 职场和发展