二人合作的结对开发

题目:返回一个整数数组中最大子数组的和。

要求: 输入一个整形数组,数组里有正数也有负数。

         数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

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

结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。

                    一人负责代码复审和代码测试计划。

                   发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

结对开发过程:

     在得知题目之后,我和我的搭档@天使LR恶魔开始了认真的讨论,最终思路是定义两个整数b和sum。在一串数组中正数和负数互相穿插,正数被负数隔开。x、y表示个数大于或等于零的数组,x表示正数数组,y表示负数数组。(x1,y1,x2,y2,…)是输入的n个元素的数组。b1=sum(x1)>0,sum=b;若b2=sum(x1)+sum(y1)>0,b3=sum(x1)+sum(y1)+sum(x2),b3可能大于b1,于是sum=b3,;可能等于b1,sum不变即可;可能小于b1,sum不变…。以此类推,我们做出了如下的代码。

程序代码:

 1 #include <iostream.h>  
 2   
 3 int maxSum(int* a, int n)  
 4 {  
 5     int sum=a[0];              //  将数组第一个数先赋给总和sum
 6 
 7     int b=0;
 8 
 9     for(int i=0; i<n; i++)
10     {
11         
12         if(b<0)
13             b=a[i];
14         else
15             b+=a[i];
16         if(sum<b)
17             sum=b;
18     }
19     return sum;
20 }
21 
22 int main()
23 {   int n;
24     cout<<"请输入数组的元素个数: "<<endl;
25     cin>>n;
26     cout<<"请输入数组的元素: "<<endl;
27     int *a=new int[n];
28     for(int i=0;i<n;i++)
29     {cin>>a[i];}                         //输入n个元素的数组
30 
31     cout<<maxSum(a,8)<<endl;             //调用函数maxSum
32     return 0;
33 }

程序结果及测试:

1、n=5时,全为负数,第一个最大:

2、n=5时,全为负数,第五个最大:

3、n=5时,全为正数:

4、n=5时,正数、负数无序:

结对开发感想:

    在此次的编程之中,让我充分的了解了结对开发程序所带来的好处。首先,结对开发不是小组开发,没有“滥竽充数”,比一个人编程更有效果,他能让两个人之间更加亲密;其次,它能让我们两个人之间互相学习互相促进,能相互学习对方的优点长处;最后我要说的是我们俩智力有限,代码仍能继续改进。

附美照一张:

原文地址:https://www.cnblogs.com/cainiao1hao/p/4348286.html