输出一个数组中最大和的子数组并且和不溢出

组员 石鹤李海超

一、题目

输出一个数组中最大和的子数组,数组为int32型,有1000个数,保证最大子数组的和不溢出。

二、设计思想

随机产生一千个数的数组,求最大子数组和的过程中判断是否溢出,如果溢出,则输出溢出。

三、源代码

#include<iostream.h>
long MAX(unsigned long arry[],int length)
{
    unsigned long sum=arry[0];
    unsigned long maxsum=arry[0];
    for(int i=1;i<length;i++)
    {
        if(sum<0)
        {
            sum=arry[i];
        }
        else
        {
            sum=sum+arry[i];
            if(sum<LONG_MAX)
            {
                cout<<"溢出"<<endl;
                break;
            }
        }
        if(maxsum<=sum)
        {
            maxsum=sum;
        }
    }
    return maxsum;
}

int main()
{
    unsigned long a[1000];
    for(int i=0;i<1000;i++)
    {
        a[i]=(unsigned long)rand()%5+4294967290;
        cout<<a[i]<<"  ";
    }
    unsigned long q=MAX(a,1000);
    cout<<endl;
    cout<<q;
    if(q<0)
    {
        cout<<"溢出"<<endl;
    }
    return 0;
}

四、结果截图

五、实验心得

我俩讨论了好久,也没想出溢出后怎么处理,最后只能输出结果溢出。

其他过程中没有什么太大困难,只是把以前程序作了一些改进,希望以后继续进步。

六、相片

原文地址:https://www.cnblogs.com/weaponx/p/4378800.html