zoukankan      html  css  js  c++  java
  • 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]<<"	";
    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 }

    四、结果截图

    五、实验体会

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

    六、合作照片

  • 相关阅读:
    android学习地址
    Android获取屏幕高度、标题高度、状态栏高度详解
    学习地址(杂)
    获取控制台应用程序自己的文件名
    学习地址
    如何分配数据库角色权限
    android 近百个源码项目
    深入理解默认构造函数
    深入理解拷贝构造函数
    读权限和执行权限的差别
  • 原文地址:https://www.cnblogs.com/czl123/p/4376623.html
Copyright © 2011-2022 走看看