标签:
结对人员:张世通 梁世豪
一、题目
二、设计思路
1、在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法
2、通过定义变量start,finish确定最大子数组的起始位置和终止位置
3、每次将所有与数组元素A[i]有关的子数组求出后,将A[i]的值付给A[length+i];
4、循环到最后一个数组元素A[length-1]时终止,即可遍历完所有数组元素
三、代码
1 // ketang6.cpp : 定义控制台应用程序的入口点。 2 // 3 #include"stdafx.h" 4 #include "iostream" 5 using namespace std; 6 7 /*确定求和存储数组元素*/ 8 void Son(int Arr[],int length,int start,int finish) 9 { 10 int max=Arr[0]; 11 int add=0;//定义求和变量 12 for(int i=0;i<length;i++) 13 { 14 add=0; 15 for(int j=i;j<length+i;j++) 16 { 17 add=add+Arr[j]; 18 if(add>max) 19 { 20 max=add; 21 start=i; 22 finish=j; 23 } 24 } 25 Arr[length+i]=Arr[i]; //每次将已经计算过的数放到最后 26 } 27 if(finish>=length) 28 { 29 cout<<"最大子数组起始位置为:"<<start+1<<endl; 30 cout<<"最大子数组终止位置为:"<<finish-length+1<<endl; 31 } 32 else 33 { 34 cout<<"最大子数组起始位置为:"<<start+1<<endl; 35 cout<<"最大子数组终止位置为:"<<finish+1<<endl; 36 } 37 cout<<"最大子数组为:"<<endl; 38 for(int m=start;m<=finish;m++) 39 { 40 cout<<Arr[m]<<" "; 41 } 42 cout<<endl; 43 cout<<"最大子数组的和为:"<<endl; 44 cout<<max<<endl; 45 } 46 47 /*主函数*/ 48 int main() 49 { 50 int num,length,start,finish;//定义原始数组长度length,求和存储数组长度num 51 start=0; 52 finish=0; 53 cout<<"请输入数组元素个数:"; 54 cin>>length; 55 num=2*length; 56 int* Arr=new int[num];//定义原始数组 57 cout<<"请输入数组数据"<<endl; 58 for(int i=0;i<length;i++) 59 { 60 cin>>Arr[i]; 61 } 62 cout<<endl; 63 Son(Arr,length,start,finish); 64 delete []Arr; 65 return 0; 66 }
四、运行结果截图
五、分析总结
这次是对上次的一维数组的拓展,代码数量不大,所以在这次的代码实现过程中,主要是一个讨论的过程,我们主要讨论了实现循环数组的方法和返回位置的思路。我觉得在这次结对开发中,发挥出了合作的优势,想法来的特别快,大概是思路碰撞出了火花,很快便解决了这个问题。当然,这不是偶然的
虽然这次的代码不长,但还是遇到了问题在解决时间复杂度O(n)时,返回位置不正确,所以采取了另一种方法,时间复杂度为O(n2),虽然没有实现时间复杂度,但是解决问题的过程却是很重要的,这是我们两个人能够坚持合作的根本
结对开发,给两个人提供的一个积极的条件,也可以给予双方一定的压力,能够刺激我们付出很大的热情投入到设计开发之中,在这个过程中,两个人可能会有矛盾,但是可以一起解决矛盾,思路的对碰才会出现新的想法。结队开发,看重的是两个人的合作,在这当中,我负责编写,梁世豪负责复查,这对我们两个人都有帮助,可以是我们的水平得到共同的提升。
六、工作照
标签:
原文地址:http://www.cnblogs.com/zhshto/p/4373946.html