题目:返回一个整数数组中最大子数组的和。
要求:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。
数组中有1000个元素。
结对编程要求:两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
一、设计思路
首先,我们还是先进行分工,继续由我来编写程序代码,由张科同学负责代码复审和代码测试。
解决思路是,我们先比较长度子数组中的最大值,存入一个数组,再比较这个数组中的各个值得大小,最终获得最大值。
对于超过int32最大表示范围,我们的解决方案是只要数组中有足够多的负数,就不会产生如此大的值。
二、源代码
#include<iostream.h>
#include<stdlib.h>
int a[1000];
int Sum(int num,int count)
{
int plus=0;
int i=num;
while(count!=0)
{
plus=plus+a[num];
num++;
count--;
}
return plus;
}
int main()
{
int i,j,k;
int Max;
int max[1000]={0};
int Count=1000;
for(i=0;i<1000;i++)
{
a[i]=10000-rand();
}
for(i=0;i<1000;i++)
{
cout<<a[i]<<' ';
if((i+1)%5==0)
cout<<endl;
}
for(i=0;i<1000;i++)
{
for(j=0;j<i+1;j++)
{
max[i]=max[i]+a[j];
}
}
Max=max[0];
for(i=0;i<1000;i++)
{
for(j=0;j<Count;j++)
{
if(max[i]<Sum(j,i+1))
max[i]=Sum(j,i+1);
}
Count--;
}
for(i=1;i<1000;i++)
{
if(Max<max[i])
Max=max[i];
}
cout<<"最大值为:"<<Max<<endl;
return 0;
}
三、运行结果
四、工作体会
通过这次结对开发,我们初次接触处理如此大的数据量,一个人编程的脑力明显不够,这时我们可以把程序分成不同的模块,一人解决一个模块,要比一个人解决所有程序,在时间上提速很多。
五、工作照
五、工作照