结队开发之一维数组最大子数组的和 1
结队小组成员:信1201-1班 黄亚萍
信1201-1班 盖相庚
一、题目与要求
题目:
返回一个整数数组中最大子数组的和
要求:
1.输入一个整形数组,数组里有正数也有负数。
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
结对编程要求:
1.两人结对完成编程任务。
2.一人主要负责程序分析,代码编程。
3.一人负责代码复审和代码测试计划。
4.发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四3月19日24:00)
二、设计思路
题目要求是要返回一个整数数组中最大子数组的和,经过和队友商议明白这道题目的大致分为这几层来编程实现:
1、自行输入数组,包括自行输入数值个数以及数值大小;
2、分别编程实现求得元素个数相同的每个子数组的和,并比较大小。可分别求得元素个数相同的子数组的和的最大值;
3、编程实现比较不同整数值的数组的最大值。
三、源代码
1 // jie.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include"iostream.h" 6 # define N 100 7 int sum1(int k,int a[],int number) 8 { 9 int x=0; 10 for(int i=k;i<=number+k-1;i++) //数组维数为number 11 { 12 x=x+a[i]; 13 } 14 return x; 15 } 16 int Largest(int list[],int length) 17 { 18 int sum[N],max1[N]; 19 int i,max; 20 for(i=1;i<=length;i++) //元素个数为i+1 21 { 22 cout<<"子数组中元素的个数数为"<<i<<"时,子数组的和的最大值为"; 23 for(int j=1;j<=length-i+1;j++) //子数组的第j个元素,求最大值 24 { 25 sum[j]=sum1(j,list,i); 26 if(sum[j]>=max1[i]) 27 { 28 max1[i]=sum[j]; 29 } 30 } 31 cout<<max1[i]<<endl; 32 } 33 34 max=max1[1]; 35 for(int k=1;k<=length;k++) 36 { 37 if(max1[k]>=max) 38 { 39 max=max1[k]; 40 } 41 } 42 return max; 43 } 44 45 int main(int argc, char* argv[]) 46 { 47 int i,number,max; 48 49 cout<<"输入这组数的个数:"; 50 cin>>number; 51 cout<<endl; 52 int list[N]; 53 int p; 54 cout<<"输入这组数:"<<endl; 55 for(i=1;i<=number;i++) 56 { 57 cout<<"第"<<i<<"个数为:"; 58 cin>>list[i]; 59 cout<<endl; 60 } 61 cout<<"最大值为:"<<Largest(list,number)<<endl; 62 cout<<endl; 63 return 0; 64 }
四、结果截图
五、结果测试
(1)该数组中的元素正数有序{1,2,3,4,5,6,7,}
(2)该数组中的元素负数有序{-1,-2,-3,-4,-5}
(3)该数组中的元素正数有序{5,1,3,9,11,2}
(4)该数组中的元素负数无序{-4,-1,-8,-2,-5,-1,-10,-6}
(5)该数组中的元素正负数都有,且无序{8,1,-2,0,-1}
测试结果正确。
六、合作中的过程、体会以及如何解决冲突(附结对开发的工作照)
在本次结对开发的实验中,我主要负责代码的部分。从这次结对开发的过程中,从读懂题意,到具体的设计思想,再到代码的编辑,直至最后的调试,我认识到结对开发的优势所在。
在面对一个项目才提出时,每个人都有自己的理解,这时候将团队里的成员的想法都结合起来,就会有产生一个最符合用户,最合适的立项目的。
在题意明确之后,如何实现这些功能时,在队员的商讨之下,就可以找到一个最便捷的设计思路,或许你会遇到一些自己想不到如何去解决的问题,那么在所有队员的思路的总结之下,那些问题就相对很容易化解。
在最后的测试中,对测试用例的选择,你的测试可能是片面的,那么多个人思考,结果就会向更全面的方向前进,找出问题,解决问题,从而更加完善你的项目。