结对初体验--找出和最大的字数组
结队人员 信1201-1班 曹美娜 袁亚姣
一、题目要求与结对开发要求
1、题目:
返回一个整数数组中最大子数组的和。
2、要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
3、结对开发要求
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
二、程序设计思想
该程序的主要问题是如何找到所有的子数组并求和,我们采用的方法是依次找出包含数组中第i个元素的所有连续的子数组,求出每次的最大值保存在另外一个数组中,最后求出该数组中的最大值,图解步骤如下:
用户输入数组:(a1,a2,a3,a4)
包含第一个元素的所有子数组集合{(a1),(a1,a2),(a1,a2,a3),(a1,a2,a3,a4)}
包含第二个元素的所有子数组集合{(a2),(a2,a3),(a2,a3,a4)}
包含第三个元素的所有子数组集合{(a3),(a3,a4)}
包含第四个元素的所有子数组集合{(a4)}
依次求出以上集合各数组元素和的中最大值
三、程序源代码
1 //程序开发者:曹美娜、袁亚姣 2 //程序开发时间:2015/3/18 3 4 #include "stdio.h" 5 #define N 1000 6 int compare( int arry[],int length) 7 { 8 int max[N],max1; 9 for(int j=0;j<length;j++) 10 { 11 int sum=0; 12 max1=-12345; 13 for(int i=j;i<length;i++) 14 { 15 sum=sum+arry[i]; 16 if(sum>=max1) 17 max1=sum; 18 } 19 max[j]=max1; 20 printf("包含数组中第%d个数的所有子数组中和最大的值为:%d\n",j,max[j]); 21 } 22 int fmax=max[0]; 23 for(int i=0;i<length;i++) 24 { 25 if(max[i]>fmax) 26 fmax=max[i]; 27 } 28 printf("所有子数组的和的最大值为:%d\n",fmax); 29 return 0; 30 } 31 int main(int argc, char* argv[]) 32 { 33 int arry[N]; 34 int length; 35 printf("请输入要比较整数的个数:"); 36 scanf("%d",&length); 37 printf("请输入整数"); 38 for(int i=0;i<length;i++) 39 { 40 scanf("%d",&arry[i]); 41 } 42 compare(arry,length); 43 return 0; 44 }
四、运行结果
五、心得体会
在这次合作过程中,我们充分体会到了结对的快乐。之前我们自己做可能有许多不会的地方,两个人在一起取长补短,一起商量。既提高了代码的质量,又提高了我们自己的水平;
我们会比一个人想的更加全面;当然也可能有反面作用,比如一个人不做了,然后都不做了。。不过我们只要正确的对待自己的小伙伴,我相信我们都可以在团队合作中得到提高。
最后pop工作合照一张