课堂作业第四周课上作业二
求所有子数组的和的最大值。要求时间复杂度为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来解决。另外通过这次实验我也明白了合作的重要性。