P2415 集合求和(有公式且附记忆方法)

题目描述

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

输入格式 

集合中的元素(元素 ≤1000)

输出格式 

s 所有子集元素之和

此题有公式!!!

给定一个数字集合S = {a1,a2,a3,a4...,an},其所有子集元素之和为(a1+a2+...+an)*2^(n-1)

推导过程大家可以自行搜索,在此帮助大家解决如何记忆这个公式. 

由所有子集元素之和联想到先把所有最简单的子集相加即a1+a2+...+an---->想成集合S的各个小弟

*读作乘以,那么我们就谐音成诚意

2谐音成儿子

^(n-1)读作n-1次方,谐音成n-1访(次访----次方)

故事开始

各小弟(a1+a2+...+an)诚意(*)要做集合S的儿子(2),于是对S进行了n-1访.为啥不是n次拜访(^)呢?因为第n次的时候各小弟已经是S的儿子了,成为自家人就不用拜访啦!

#include<bits/stdc++.h>
using namespace std;             //集合元素<=30,所以a数组整30个元素
int a[30],i=0,s=0,j;             //s存各元素之和  
long long sum=0;                 //sum是子集元素之和,因为数据大,开long long
int main(){
    while(cin>>a[i++]);          //向a数组输入数,i++的意思是先使用i再加一,结束时i为2
    for(j=0;j<=i-1;j++)          //下标0开始,所以是一直到i-1
	      s=s+a[j];              //求集合中各元素之和
    sum=s*pow(2,i-2);            //利用公式求,pow是c++内置函数,作用是一个数的多少次幂
    cout<<sum;                   //输出结果
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值