3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一、题目要求

题目:返回一个整数数组中最大子数组的和。

要求: 要求程序必须能处理1000 个元素;

每个元素是int32 类型的;

输入一个整形数组,数组里有正数也有负数;

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

求所有子数组的和的最大值。要求时间复杂度为O(n);

结果溢出之后能判断。

二、设计思想

  在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出。但我们通过查资料得知int32最大数是2147360000即2^31,如果结果溢出则提示溢出。

三、源代码

 1 #include<iostream.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 void main()
 5 {
 6     while(1)
 7     {
 8         int length,temp;
 9         int *arr=new int[length];
10         cout<<"请输入该数组长度:";
11         cin>>length;
12         //cout<<"请输入该数组:";
13         srand((unsigned)time(NULL));
14         for(int i=0;i<length;i++)
15         {
16             arr[i]=rand()*10000;
17             temp=rand()%2;
18             if(temp==0)
19             {
20                 arr[i]=arr[i];
21             }
22             else
23             {
24                 arr[i]=-arr[i];
25             }
26             cout<<arr[i]<<"\t";
27         }
28         int result = arr[0];
29         int sum = arr[0];
30         for(i=1;i<length;i++)
31         {
32             if (sum > 0)
33             {
34                 sum += arr[i];
35             }
36             else
37             {
38                 sum =arr[i];
39             }
40             if (sum >result)
41                 result = sum;
42         }
43         if(result<2147360000||result==2147360000)
44         {
45             cout<<"该数组中最大连续子数组之和是:"<<result<<endl;
46         }
47         else
48         {
49             cout<<"超出最大范围溢出!"<<endl;
50         }
51         cout<<"----------------------------------------"<<endl;
52     }
53 }

四、结果截图

五、实验体会

  以前我们做实验的时候,总是想的太天真,理所当然的认为用户输入的一定是按我们的要求输入的,但现实情况却绝非如此,对于大数溢出问题我们考虑不周,还有其他的细节问题我们有很多没有考虑到。当输入数组的长度较大时,很可能会溢出,以后要多多注意!

六、合作照片

posted @ 2015-03-29 22:37  Jameslige  阅读(170)  评论(1编辑  收藏  举报