返回一个整数数组中最大子数组的和之测试

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

要求:

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

    每个元素是int32 类型的;

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

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

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

思路:

   考虑到手动输入1000个元素所以在程序中由系统随机出1000个元素进行测试。代码与之前的代码差别不大。

程序代码:

   

 1 #include <iostream.h>  
 2 #include<stdlib.h>
 3 
 4 int maxSum(int* a, int n)  
 5 {  
 6      
 7     int sum=a[0];
 8     int b=0;  
 9     
10     for(int i=0; i<n; i++)  
11     {  
12         if(b<0)           //...  
13             b=a[i];  
14         else  
15             b+=a[i];  
16         if(sum<b)  
17             sum=b;
18     }  
19      return sum;
20 }  
21   
22 int main()  
23 {   
24     int n;
25     cout<<"请输入数组的元素个数: "<<endl;
26     cin>>n;
27     cout<<"请输入数组的元素: "<<endl;
28     int *a=new int[n];
29     int x;
30     for(int i=0;i<n;i++)
31     {
32         x=rand()-rand();
33         a[i]=x;
34         cout<<a[i]<<" ";
35     }
36     
37     cout<<endl;
38     cout<<maxSum(a,n)<<endl;
39     
40     return 0;  
41 } 

程序截图:

  

对代码溢出的测试:

 将

    int x;
    for(int i=0;i<n;i++)
    {
        x=rand()-rand();
        a[i]=x;
        cout<<a[i]<<" ";
    }

修改为

   for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }

程序截图:

 

感想:

  2^31-1=2147483647, 代码的溢出范围为-2^31~2^31之间,超出即溢出。在程序的实现过程中,掌握了随机rand的使用方法,运用了调用函数,让程序变得“高大上”。但我们仍还有提升空间,让我们掌握更多的知识。

原文地址:https://www.cnblogs.com/cainiao1hao/p/4378943.html