课堂作业第四周课上作业二

题目要求:返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

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

我的伙伴是侯涛亮,我负责程序分析,代码编程,他主要负责代码复审和代码测试计划

工作照:

设计思路:用随机数产生固定的个数为n,其中有负有正,for循环循环N次,默认最大子数组和为零,从a[0]开始使数组的每一个相加为k,再判断K是否大于最大子数组和Maxsum,大于是另maxsum=k;最后在判断k是否大于零,若小于零则让k=0;将数组定义为a【1000】这样可以处理一千个数,Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数,当大于该数时则会归零,可以用string类型来实现。

出现问题:当数组过长或者数太大时会出现归零,数组长度不能超过250000。

解决方案:用string字符串来解决大整数问题。

代码:

#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int a[25000],i,j,f,n;
int MaxSum = 0;
int k = 0;
cout<<"请输入数组中数字的个数"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
j=rand()%2+1;
f=pow(-1.0,j);
a[i]=f*rand()%100000;
}

cout<<endl;
cout<<"最大子数组为";

for(i=0;i<n;i++)
{

k += a[i];
if(k > MaxSum)
MaxSum = k;

if(k < 0)
k = 0;

}

cout<<MaxSum<<endl;
}

截图

总结:数组长度不能过大,否则程序将无法运行。int32有一定的取值范围,当超过时要用string来解决。另外通过这次实验我也明白了合作的重要性。

原文地址:https://www.cnblogs.com/bingoing/p/4377519.html