您的位置:首页 > 其它

返回一个整数数组中最大子数组的和之测试

2015-03-30 19:35 127 查看
题目:返回一个整数数组中最大子数组的和。

要求:

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

每个元素是int32 类型的;

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

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

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

思路:

考虑到手动输入1000个元素所以在程序中由系统随机出1000个元素进行测试。代码与之前的代码差别不大。

程序代码:

#include <iostream.h>
#include<stdlib.h>

int maxSum(int* a, int n)
{

int sum=a[0];
int b=0;

for(int i=0; i<n; i++)
{
if(b<0)           //...
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}

int main()
{
int n;
cout<<"请输入数组的元素个数: "<<endl;
cin>>n;
cout<<"请输入数组的元素: "<<endl;
int *a=new int
;
int x;
for(int i=0;i<n;i++)
{
x=rand()-rand();
a[i]=x;
cout<<a[i]<<" ";
}

cout<<endl;
cout<<maxSum(a,n)<<endl;

return 0;
}


程序截图:





对代码溢出的测试:



int x;
for(int i=0;i<n;i++)
{
x=rand()-rand();
a[i]=x;
cout<<a[i]<<" ";
}


修改为

for(int i=0;i<n;i++)
{
cin>>a[i];
}


程序截图:



感想:

2^31-1=2147483647, 代码的溢出范围为-2^31~2^31之间,超出即溢出。在程序的实现过程中,掌握了随机rand的使用方法,运用了调用函数,让程序变得“高大上”。但我们仍还有提升空间,让我们掌握更多的知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐