#include "stdafx.h"
#include <iostream>
using namespace std;
#define SIZE 5 //数组的个数
#define MAXSIZE 100 //子集个数的最大值
void CaculateSum(int sum[],int length,int num[])//计算数组中各个子集的和
{
int j=0;
for(int i=0;i<SIZE;i++)
{
for(int k=i;k<SIZE;k++)
{
if(i==k)
{
sum[j]+=num[k];
}
else
{
sum[j]=sum[j-1]+num[k];
}
j++;
}
}
}
//求所有情况的个数
int GetAcc()
{
int acc=0;
for(int i=1;i<=SIZE;i++)
{
acc+=i;
}
return acc;
}
//找出数组中的最大值,length是b[]中的个数
int GetMax(int b[],int length)
{
int max=b[0];
for(int i=0;i<length;i++)
{
if(max<b[i])
{
max=b[i];
}
}
return max;
}
int main()
{
int num[SIZE],sum[MAXSIZE],max=0,acc;
int count[2]={0,0}; //num[num]是要求的整数count[2]中是负数和正数的个数
cout<<"请输入"<<SIZE<<"个整数:";
for(int i=0;i<SIZE;i++) //计算数组中正数和负数的个数
{
cin>>num[i];
if(num[i]<0)
count[0]++; //负数的个数
else
count[1]++; //正数
}
acc=GetAcc();
for(int i=0;i<acc;i++)
{
sum[i]=0;
}
if(count[0]==0) //若全是正数的话
{
int i;
for( i=0;i<SIZE;i++)
{
max+=num[i];
}
}
else if((count[1]==0)||(count[0]==1)) //若全是负数或者有一个正数
{
max=GetMax(num,SIZE);
}
else //其他情况
{
CaculateSum(sum,acc,num);
max=GetMax(sum,acc);
}
cout<<"最大子集的和是:"<<max<<endl;
return 0;
}