• 返回一个整数数组中最大子数组的和。(二人结对编程)


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

    要求:

      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个)时,不可避免的就会使程序的运算时间增长很多,这让我们意识到,在进行大量数据处理的时候,认真考虑所用算法的时间复杂度,从而选择相对简单的算法的重要性,不止可以提高效率,还能降低出错率。
     
     
    合作美图:
                                                 
                                                 (图为20163955 王美仪和20163953 关甜欢合作时照片)
     
     
  • 相关阅读:
    HTML表单
    USB3.0接口传输速度慢
    工作总结
    前台获取时间差--兼容那些事
    多个时间段统计
    【Spring】--OpenSessionInViewFilter 的配置及作用
    【Hibernate】--关联关系映射:继承映射
    【Hibernate】--关联关系映射:多对多映射
    【Spring】--Spring方法注入
    【Hibernate】--关联关系映射:一对多和多对一
  • 原文地址:https://www.cnblogs.com/shenzhenxi/p/9787045.html
Copyright © 2020-2023  润新知