一、题目与要求
题目:
返回一个整数数组中最大子数组的和。
要求:
入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
结对编程要求:
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四3月19日24:00)
二、设计思路
题目要求是要返回一个整数数组中最大子数组的和,一开始我跟黄亚萍同学看了好半天才读明白这道题目的意思
大致分为这几层来编程实现
1、执行输入数组,包括自行输入数值个数以及数值大小
2、分别编程实现求得相同整数数量的数组的和,并比较大小。可分别求得每个相同整数值的数组的最大值。
3、编程实现比较不同整数值的数组的最大值
三、源代码
1 #include"iostream.h" 2 # define N 100 3 int sum1(int k,int a[],int number) 4 { 5 int x=0; 6 for(int i=k;i<=number+k-1;i++) //数组维数为number 7 { 8 x=x+a[i]; 9 } 10 return x; 11 } 12 int Largest(int list[],int length) 13 { 14 int sum[N],max1[N]; 15 int i,max; 16 for(i=1;i<=length;i++) //元素个数为i+1 17 { 18 cout<<"子数组中元素的个数数为"<<i<<"时,子数组的和的最大值为"; 19 for(int j=1;j<=length-i+1;j++) //子数组的第j个元素,求最大值 20 { 21 sum[j]=sum1(j,list,i); 22 if(sum[j]>=max1[i]) 23 { 24 max1[i]=sum[j]; 25 } 26 } 27 cout<<max1[i]<<endl; 28 } 29 30 max=max1[1]; 31 for(int k=1;k<=length;k++) 32 { 33 if(max1[k]>=max) 34 { 35 max=max1[k]; 36 } 37 } 38 return max; 39 } 40 41 int main(int argc, char* argv[]) 42 { 43 int i,number,max; 44 45 cout<<"输入这组数的个数:"; 46 cin>>number; 47 cout<<endl; 48 int list[N]; 49 int p; 50 cout<<"输入这组数:"<<endl; 51 for(i=1;i<=number;i++) 52 { 53 cout<<"第"<<i<<"个数为:"; 54 cin>>list[i]; 55 cout<<endl; 56 } 57 cout<<"最大值为:"<<Largest(list,number)<<endl; 58 cout<<endl; 59 return 0; 60 }
四、结果截图
五、合作中的过程、体会以及如何解决冲突(附结对开发的工作照)
因为可爱的王老师把我弄到第一排,所以很有幸第一次的结对开发不是跟舍友 而是跟美女同学。。。就是黄亚萍同学啦~~因为我的编程比较垃圾,C学的一般般 加上黄亚萍同学人比较好让着我,所以这次是黄亚萍同学负责重要的驾驶员的工作,我负责领航员。对 就这样。
再就是体会的话,结对真的有好处,尤其是连题目看半天才能看的懂的情况下,有同学一起商量着来可以很快把题目理解,并能够在一起商量着构思解决思路,具体编程实现由黄亚萍同学一手包办,我主要是跟黄亚萍同学一起构思编程实现的思路,以及最后的调试之类的工作。
至于冲突,貌似木有。。两个人结对开发的效率对于我来说真的提高了很多,以前一个函数弄错了都要想半天,现在有同学指点就很快就能弄明白了。解决冲突的话我觉得肯定是谁的办法有用就用谁的,相互尊重理解。
照片~~