一、题目:
返回一个整数数组中最大子数组的和。
二、要求:
输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。 发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
三、分工
我选择了领航员的角色,伙伴则是驾驶员职责;
一下是我们的工作照:
四、感想
这次结对开发让我感受到了三个臭皮匠顶一个诸葛亮的含义而不是我一直以为的三个臭皮匠只是一堆臭皮匠。我俩的编程能力都不是非常强,但是在我俩的合作中,往往能否彼此互补,并且可以快速的找到问题的解决方法,更加清晰的找到错误的地方。比如:项目的一开始我就纠结在题目的要求上,不清楚子数组和是怎么回事,通过我俩的彼此探讨,让我没有在编程序的一开始就错误,真是幸运,不对,应该是我们一起合作的功劳。后来对于怎么实现遍历求子数组和,我俩商讨了好久,先是我说出我的想法,用三重循环求出各个数组和,但是他说要求O(n),好吧我想简单了。后来最终讨论的结果是输出一个5个元素的数组,然后求出每个数组的和然后比较。这是我们的能力之内的。在这一次的小训练中,就发现结对编程是真心能够更加有效率的出结果,并且能够开阔思路,我很喜欢第一次尝试的这种编程方式。
五代码
#include<iostream.h>
int main()
{
int a[1000];
int max;
int sum[1000];
int i;
//int n;
int j;
//cout<<"输入数组成员个数:";
// cin>>n;
cout<<"输入5元数组:";
for(i=0;i<5;i++)
{
cin>>a[i];
}
for(i=0;i<5;i++)
{
sum[i]=a[i];
}
for(i=0;i<4;i++)
{
sum[5+i]=a[i]+a[i+1];
}
for(i=0;i<3;i++)
{
sum[9+i]=a[i]+a[i+1]+a[i+2];
}
for(i=0;i<2;i++)
{
sum[12+i]=a[i]+a[i+1]+a[i+2]+a[i+3];
}
for(i=0;i<1;i++)
{
sum[14+i]=a[i]+a[i+1]+a[i+2]+a[i+3]+a[i+4];
}
max=sum[0];
for(i=0;i<15;i++)
{
if(sum[i]>max)
{
max=sum[i];
j=i;
}
}
cout<<"子数组和最大为:"<<"sum["<<j<<"]="<<max<<endl;
return 0;
}
六.结果截图