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

题目:

  返回一个整数数组中最大子数组的和。

要求:

  要求程序必须能处理1000 个元素;

  每个元素是int32 类型的;

  输入一个整形数组,数组里有正数也有负数。

  数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

  求所有子数组的和的最大值。

(我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。)

 

 

 

 

#include<stdlib.h>
#define AMOUNT 1000
 
int main()
{
    long int arr[AMOUNT];
    long int arrCopy[AMOUNT];
    long int max[AMOUNT];
    int i,j;
    int n;
    int start,rear;     //子数组的开始,结束
    int mount=AMOUNT;
    for(i=0;i<mount;i++)
    {
    try
    {
            n=rand()%2;
            if(n==0)
        {
        arr[i]=rand();
        arrCopy[i]=arr[i];
        max[i]=arr[i];
        }
        else
        {
        arr[i]=-rand();
        arrCopy[i]=arr[i];
        max[i]=arr[i];
        }
    }
    catch(long int e)
    {
        cout<<"Long Inter=ger Exception!"<<endl;
    }
    }
    cout<<"Array :"<<endl;
    for(i=0;i<mount;i++)
    {
        cout<<arr[i]<<"  ";
    if((i+1)%10==0)
    {
        cout<<endl;
    }
    }
    for(j=0;j<mount-1;j++)
    {
        for(i=j+1;i<mount;i++)
        {
            try
        {  
        arr[j]=arr[j]+arr[i];
        if(max[j]<arr[j])
        {
            max[j]=arr[j];
            rear=i+1;
        }
            }
        catch(long int e)
        {
        cout<<"Long Inter=ger Exception!"<<endl;
        }
        }
    }
    for(i=0;i<mount;i++)
    {
        if(max[0]<max[i])
    {
            max[0]=max[i];
        start=i+1;
    }  
    }
    cout<<endl;
    cout<<"从第"<<start<<"个数"<<arrCopy[start-1]<<"开始"<<endl;
    cout<<"到第"<<rear<<"个数"<<arrCopy[rear-1]<<"结束"<<endl;
    cout<<"子数组和的最大值为: "<<max[0]<<endl;
    return 0;
}
                     
总结:做起来比较吃力,不过有了一定的体会,日后把心思多放在学习上一些,希望我能较快进入状态。
posted @ 2015-04-02 22:15  dkjjjj  阅读(120)  评论(0编辑  收藏  举报