环形数组求最大子数组
题目:
返回一个环形数组中的最大子数组。
要求:
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
思想:
上一次的题目是返回一个整数数组中最大子数组的和;这次在上一次的基础上,我们原本想采用两个相同数组首位相连来实现环形的功能,采用原来的方法未能实现,后来采用课堂上张世通同学讲的方法,每次把数组首个元素移到末尾,重新比较,然后求最大
程序源代码:
1 #include<iostream> 2 #include<ctime> 3 using namespace std; 4 void ARR(int [],int []); 5 void MAX(int,int [] ,int [],int ,int,int); 6 int main() 7 { 8 srand((unsigned)time(NULL)); 9 int * arr1=new int[5]; 10 int * arr2=new int[5]; 11 int * arr3=new int[5]; 12 int * arr4=new int[5]; 13 int * arr5=new int[5]; 14 int * result=new int[5]; 15 int sum=0,k=0,finally=0; 16 int randoms=0,c1=0,c2=0; 17 cout<<"随机产生10个数值:\n"<<endl; 18 for ( int i=0; i<5; i++ ) { 19 randoms = ( -rand()%100 + ( rand()%100 ) ); 20 arr1[i] = randoms; 21 cout<<"数组元素"<<i+1<<"分别为:"<<arr1[i]<<endl; 22 } 23 MAX(0,result,arr1,sum,c2,c1); 24 ARR(arr1,arr2); 25 MAX(1,result,arr2,sum,c2,c1); 26 ARR(arr2,arr3); 27 MAX(2,result,arr3,sum,c2,c1); 28 ARR(arr3,arr4); 29 MAX(3,result,arr4,sum,c2,c1); 30 ARR(arr4,arr5); 31 MAX(4,result,arr5,sum,c2,c1); 32 for ( int i=0; i<5; i++ ) { 33 if(finally<result[i]) 34 { 35 finally=result[i]; 36 } 37 38 } 39 cout<<"最大数组之和:"<<finally<<endl<<endl; 40 return 0; 41 } 42 void ARR(int arr1[],int arr2[]) 43 { 44 for ( int i=0; i<4; i++ ) { 45 46 arr2[i] = arr1[i+1]; 47 48 } 49 arr2[4]=arr1[0]; 50 } 51 void MAX(int i,int result[],int arr1[],int sum,int c2,int c1) 52 { 53 result[i]=arr1[0]; 54 sum=c1=c2=0; 55 56 for ( int j=0; j<5; j++ ) { 57 if ( sum>=0 ){ c2=j; sum+=arr1[j]; } 58 else { c1=j; sum=arr1[j]; } 59 if( result[i] < sum ) { 60 61 result[i]=sum; 62 } 63 } 64 }
运行截图
结对编程总结:
程序采用函数调用的方式,易于扩展。通过这次编程实践,我觉得交流可以
扩充思路,互相指点,很有帮助。