zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和。(二人结对编程)

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

    要求:

      1.要求程序必须能处理1000 个元素;
      2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;
      3.输入一个整型数组,数组里有正数也有负数。
      4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
      5.求所有子数组的和的最大值。要求时间复杂度为O(n)。 
     
    设计思想:
    (1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型。
    (2)为了满足要求3,我们将随机函数写成 a[i] = rand()%2001-1000 ,随机生成(-1000,1000)中的数。
    (3)先定义一个int类型的max,值为0,以后用它来存储最大子数组的和,再定义一个int类型的b,用它来求累加和(即各个子数组的和)。当b<0时,清空b中原有元素和,继续从下一元素累加,同时将之前最大的累加和存入max更新,依次循环直到i<n时结束。而当整个数组元素均为非正整数时,找出数组中最大元素,存入max。
     
    源代码为:
     1 #include <iostream>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int i;
     9     int n;
    10     int *a;
    11     int max = 0;
    12     int b = 0;
    13 
    14     cout<<"请输入数组元素个数:"<<endl;
    15     cin>>n;
    16     a=new int[n];
    17     srand(time(NULL));
    18     cout<<"数组为:"<<endl;
    19     for (i = 0; i<n; i++)
    20     {
    21         a[i] = rand()%2001-1000 ;
    22     }
    23     for (i = 0; i<n; i++)
    24     {
    25         cout << a[i] << '	';
    26     }
    27     cout << endl;
    28 
    29     for (i = 0; i < n; i++)
    30     {
    31         b += a[i];
    32         if (b < 0)
    33             b = 0;
    34         if (b > max)
    35             max = b;
    36     }
    37     if (max == 0)
    38     {
    39         max = a[0];
    40         for (i = 0; i < n; i++)
    41         {
    42             if (max < a[i])
    43             {
    44                 max = a[i];
    45             }
    46         }    
    47     }
    48     cout <<"最大子数组为:"<< max << endl;
    49     system("pause");
    50     return 0;
    51 }

    结果截图:

      

    溢出测试:
    为了测试要求2的问题,我们在取数的时候对其进行了乘4294967296的操作,即将随机函数写成a[i] = rand()*4294967296 ,使数组内的元素可以越界。

    结果如下:

    可以看出程序有溢出时,运行结果会使每个元素显示为0,程序出错。
    总结:当我们想要处理的数组元素个数太多(如1000个)时,不可避免的就会使程序的运算时间增长很多,这让我们意识到,在进行大量数据处理的时候,认真考虑所用算法的时间复杂度,从而选择相对简单的算法的重要性,不止可以提高效率,还能降低出错率。

     合作美图:

                                                                                                                

                                                                                                               (图为20163953 关甜欢和20163955 王美仪合作时照片)
  • 相关阅读:
    20155311《信息安全系统设计基础》课程总结
    20155311《信息安全系统设计基础》第14周学习总结
    20155311《信息安全系统设计基础》第十三周学习总结
    2017-2018-1 《信息安全系统设计基础》实验五 通信协议设计
    补交课下测试(ch12并发编程) 08.第八周
    2017-2018-1 20155311 实验四 外设驱动程序设计
    2017-2018-1 学号20155311 《信息安全系统设计基础》第11周学习总结
    PWD的编译及调试
    2017-2018-1 学号20155311 《信息安全系统设计基础》第9周学习总结
    2017-2018-1 20155311 实验三 实时系统
  • 原文地址:https://www.cnblogs.com/guantianhuan/p/9787059.html
Copyright © 2011-2022 走看看