结对开发
一、题目与要求
题目:
返回一个整数数组中最大子数组的和。
要求:
入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
结对编程要求:
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四3月19日24:00)
二、设计思路
两人共同阅读题目了解到最大子数组的概念是数组中连续的一个或多个整数组成的一个数字,注意到几个关键字分别是:连续,一个或多个,整数;
要求最大值结果,故定义返回最大值的函数Largest(),将数组分别以1,2,3,4,5为单位将数组划分成若干个子数组,分别调用Largest()函数求最大值,并将结果保存到新的数组b中,再次调用Largest()函数求得b数组中的最大值,即是所要求的结果。
三、源代码
#include <iostream.h> int b[5]={0}; int Largest(int list[],int length) { int i,max=list[0];//初始化的时候要赋值, for(i=0;i<=(length-1);i++) { if(list[i]>max) { max=list[i]; } } return max; } int main(void) { int a[5]; cout<<"请输入5个整数,中间用空格隔开:"<<endl; for(int j=0;j<5;j++) { cin>>a[j]; } cout<<"连续1个分组最大结果:"<<Largest(a,5)<<endl; b[0]=Largest(a,5); for(int i=0;i<4;i++) { b[i]=a[i]+a[i+1]; } cout<<"连续2个分组最大结果:"<<Largest(b,4)<<endl; b[1]=Largest(b,4); for(i=0;i<3;i++) { b[i]=a[i]+a[i+1]+a[i+2]; } cout<<"连续3个分组最大结果:"<<Largest(b,3)<<endl; b[2]=Largest(b,3);
for(i=0;i<2;i++) { b[i]=a[i]+a[i+1]+a[i+2]+a[i+3]; } cout<<"连续4个分组最大结果:"<<Largest(b,2)<<endl; b[3]=Largest(b,2); for(i=0;i<1;i++) { b[i]=a[i]+a[i+1]+a[i+2]+a[i+3]+a[i+4]; } cout<<"连续5个分组最大结果:"<<Largest(b,1)<<endl; b[4]=Largest(b,1); cout<<"结果为:"<<Largest(b,5)<<endl; return 0; } |
四、结果截图
五、合作中的过程、体会以及如何解决冲突(附结对开发的工作照)
(1)合作中的过程:我负责程序分析,代码编程;他负责代码复审和代码测试计划;
(2)体会:两个人如果能达到高度的切合,那么程序开发效率是很高的,但是高度切合的状态并不能持续理想中那样长的时间,一旦切合度低到一定的水平那么开发进度就会非常缓慢,甚至不如一个人开发更快,所有开发过程中要注意两个人的状态。还有就是,两个人的编程水平可能不一样,也很难说一样,所以如果碰见这样的情况时,领航员就要具备一种能力,那就是启发编程那个人的能力,让他能够发挥超常的水平,这很关键。
(3)如何解决冲突:过程中我们以2为单位分组的时候会产生几个结果的时候产生了冲突,我们用了具体的例子让他明白了是有4个结果。