您的位置:首页 > 其它

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

2015-03-29 22:37 204 查看
一、题目要求

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

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

每个元素是int32 类型的;

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

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

求所有子数组的和的最大值。要求时间复杂度为O(n);

结果溢出之后能判断。

二、设计思想

  在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出。但我们通过查资料得知int32最大数是2147360000即2^31,如果结果溢出则提示溢出。

三、源代码

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
while(1)
{
int length,temp;
int *arr=new int[length];
cout<<"请输入该数组长度:";
cin>>length;
//cout<<"请输入该数组:";
srand((unsigned)time(NULL));
for(int i=0;i<length;i++)
{
arr[i]=rand()*10000;
temp=rand()%2;
if(temp==0)
{
arr[i]=arr[i];
}
else
{
arr[i]=-arr[i];
}
cout<<arr[i]<<"\t";
}
int result = arr[0];
int sum = arr[0];
for(i=1;i<length;i++)
{
if (sum > 0)
{
sum += arr[i];
}
else
{
sum =arr[i];
}
if (sum >result)
result = sum;
}
if(result<2147360000||result==2147360000)
{
cout<<"该数组中最大连续子数组之和是:"<<result<<endl;
}
else
{
cout<<"超出最大范围溢出!"<<endl;
}
cout<<"----------------------------------------"<<endl;
}
}


四、结果截图



五、实验体会

  以前我们做实验的时候,总是想的太天真,理所当然的认为用户输入的一定是按我们的要求输入的,但现实情况却绝非如此,对于大数溢出问题我们考虑不周,还有其他的细节问题我们有很多没有考虑到。当输入数组的长度较大时,很可能会溢出,以后要多多注意!

六、合作照片

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: