结队人员 信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 #include "stdafx.h" 6 #define N 1000 7 int compare( int arry[],int length) 8 { 9 int max[N],max1; 10 for(int j=0;j<length;j++) 11 { 12 int sum=0; 13 max1=-12345; 14 for(int i=j;i<length;i++) 15 { 16 sum=sum+arry[i]; 17 if(sum>=max1) 18 max1=sum; 19 } 20 max[j]=max1; 21 printf("包含数组中第%d个数的所有子数组中和最大的值为:%d ",j+1,max[j]); 22 } 23 int fmax=max[0]; 24 for(int i=0;i<length;i++) 25 { 26 if(max[i]>fmax) 27 fmax=max[i]; 28 } 29 printf("所有子数组的和的最大值为:%d ",fmax); 30 return 0; 31 } 32 int main(int argc, char* argv[]) 33 { 34 int arry[N]; 35 int length; 36 printf("请输入要比较整数的个数:"); 37 scanf("%d",&length); 38 printf("请输入整数"); 39 for(int i=0;i<length;i++) 40 { 41 scanf("%d",&arry[i]); 42 } 43 compare(arry,length); 44 return 0; 45 }
四、运行结果
五、心得体会
这次结队开发体会很多,我们小组就2个人,由于程序简单,所以没有代码分工,主要就是一人编程一人测试检查;开始我们想到的不是以上的实现方法,后来觉得循环次数太多,而且拓展性不高,然后又重新讨论方法;在编程过程中我绝得我俩配合很默契,效率也很高,有时我丢落“;”号或起变量名不友好时,我的小伙伴总是能及时提醒,当遇到逻辑错误时,我俩经过讨论也最终能将问题解决;很多人绝得团队合作自己的想法会受局限,可是通过这次的经验我觉得要有正确的方式方法对待自己的伙伴,当进入编程气氛时,你会肯定会感觉到效率的提高,2个人的想法总该比一个人的想法多。
最后po工作合照一张