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


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

    要求:

        要求程序必须能处理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的使用方法,运用了调用函数,让程序变得“高大上”。但我们仍还有提升空间,让我们掌握更多的知识。

  • 相关阅读:
    符号化Symbol(符号)体系
    shp2pgsql
    ArcGIS Flex(9.3)+GP服务完成最短路径分析(1)转载
    安装postgis,使用postgis导入shapefile的步骤总结 转载
    iis .NET的安装顺序反了该怎么办?
    WindowsXP 安装 PostgreSQL 8.4.2 数据库
    Web前端数据缓存处理
    SpringBoot 无Session开发
    Web端子页面iframe出现登录页面处理。
    Mybatis Generator自定义扩展
  • 原文地址:https://www.cnblogs.com/cainiao1hao/p/4378943.html
Copyright © 2020-2023  润新知