• 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 }

    四、结果截图

    五、实验体会

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

    六、合作照片

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/czl123/p/4376623.html
Copyright © 2020-2023  润新知