hzCPPOJ

递归_补充代码求给定数字的所有组合的和

时间限制:  10 s      内存限制:   128 MB
提交:50     正确:32     分值:95

题目描述

求给定数字的所有组合的和
例如给定数字1,2,3,其所有组合为 {},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}。

他们的和=0+1+2+3+(1+2)+(1+3)+(2+3)+(1+2+3)=24

提示:求一个集合的子集,此问题不太好分为求规模较小元素的子集问题,但是我们可以考虑每一个元素。
      也就是每一个元素取或者不取的问题,这也是一个递归的过程。

此题为附加代码题,请根据下面代码续写,按照提示信息提交相关代码即可。

#include<iostream>
using namespace std;
const int MAXSIZE = 31;
int n, a[MAXSIZE] = {0};
long long f(int i, long long sum);//前i项的各个组合之和已经算好,和为sum 
int main() {
    cin >> n;
    for(int i = 1; i <= n; i++){
	cin >> a[i];
    }
    cout << f(0, 0);//前0项的各个组合之和为0 
    return 0;
}
//************提交此行以下的代码************************

    此处f()函数的实现代码 

//************提交此行以上的代码************************


输入

第一行是正整数n,n<=30
第二行是n个不大于100的互不相等的正整数

输出

n个正整数所有组合的和

样例

样例输入:
3 1 2 3
样例输出:
24

提交人

lixun2017

来源/分类