#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; }