结对开发—一维数组之大数溢出
结对成员:信1201-1班 黄亚萍
信1201-1班 袁亚姣
一、题目要求
题目:返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
二、设计思路
当对1000个数的数组求最大子数组的和,若随机生成的数溢出,则结束该程序。
三、源程序代码
1 // jie.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include "stdlib.h" 6 #include"iostream.h" 7 #include"math.h" 8 #include"time.h" 9 # define N 10000 10 int sum1(int k,int a[],int number) 11 { 12 int x=0; 13 for(int i=k;i<=number+k-1;i++) //数组维数为number 14 { 15 x=x+a[i]; 16 } 17 return x; 18 } 19 int Largest(int list[],int length) 20 { 21 int sum[N],max1[N]; 22 int i,max; 23 for(i=1;i<=length;i++) //元素个数为i 24 { 25 cout<<"子数组中元素的个数数为"<<i<<"时,子数组的和的最大值为"; 26 for(int j=1;j<=length-i+1;j++) //子数组的第j个元素,求最大值 27 { 28 29 sum[j]=sum1(j,list,i); 30 31 if(sum[j]>=max1[i]) 32 { 33 max1[i]=sum[j]; 34 } 35 } 36 cout<<max1[i]<<endl; 37 } 38 39 max=max1[1]; 40 for(int k=1;k<=length;k++) 41 { 42 if(max1[k]>=max) 43 { 44 max=max1[k]; 45 } 46 } 47 return max; 48 } 49 50 int main(int argc, char* argv[]) 51 { 52 int i,number; 53 int max; 54 srand( (unsigned)time( NULL ) ); 55 cout<<"输入这组数的个数:"; 56 cin>>number; 57 cout<<endl; 58 int list[N]; 59 cout<<"输入这组数:"<<endl; 60 for(i=1;i<=number;i++) 61 { 62 cout<<"第"<<i<<"个数:"; 63 list[i]=rand()%12345678912345678934+2147483646; 64 if(list[i]<0) 65 { 66 cout<<"数据溢出"<<endl; 67 exit(0); 68 } 69 else 70 { 71 cout<<list[i]; 72 } 73 74 cout<<endl; 75 } 76 cout<<"最大值为:"<<Largest(list,number)<<endl; 77 cout<<endl; 78 return 0; 79 }
四、运行结果
五、总结与心得
在本次实验中,我们只实现了捕捉溢出的数据。当发现有溢出时,直接结束程序,未能实现对数据的处理,使得程序继续运行,还有待优化。