求一维数组的最大子数组的和

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

posted on 2016-03-24 10:49  897897  阅读(139)  评论(0编辑  收藏  举报

导航