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


    一、程序题目

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

    二、程序要求

      1、输入一个整型数组,数组里有正数也有负数;

      2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

      3、求所有子数组的和的最大值,要求时间复杂度为O(n)。

    三、程序设计思想

      1、数组的长度和各个元素由键盘键入;

      2、先将各元素累加,每加一个数,看结果是否为0,若为0,重置结果,并且结果与最大子数组和(简称最大和)比较,若有更大的和,就保存较大的结果到最大和中;

      3、若最大和与结果的值均为0,说明数组为负数数组,最大子数组即为最大元素。

    四、源程序代码

     1 //李俏、张莹荧,2016.3.21
     2 //求整数数组的最大子数组的和
     3 
     4 #include<iostream>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int arrlength, i;
    10     int maxsum = 0, sum = 0;
    11     int arr[100];
    12 
    13     cout << "请输入数组长度:";
    14     cin >> arrlength;
    15     if (arr == NULL || arrlength == 0)
    16     {
    17         //exit(1);
    18         return 0;
    19     }
    20 
    21     cout << "请输入数组元素:";
    22     for (i = 0; i<arrlength; i++)
    23     {
    24         cin >> arr[i];
    25     }
    26 
    27     maxsum = 0;
    28     sum = 0;
    29     for (i = 0; i<arrlength; i++)
    30     {
    31         sum = sum + arr[i];//累加
    32 
    33         if (sum<0)      //当前和小于0,重置为0
    34         {
    35             sum = 0;
    36         }
    37 
    38         if (sum>maxsum) // 当前和大于最大和,则重置最大和 
    39         {
    40             maxsum = sum;
    41         }
    42     }
    43 
    44     if (maxsum == 0)      //maxsum=0,说明数组中的数值均为负数
    45     {
    46         maxsum = arr[0];
    47         for (i = 1; i<arrlength; i++)
    48         {
    49             if (arr[i]>maxsum)//求出负数数组的最大值
    50             {
    51                 maxsum = arr[i];
    52             }
    53         }
    54     }
    55     cout << "最大子数组的和为:" << maxsum << endl;
    56 
    57     return 0;
    58 }

    五、运行结果截图

      

      

      

    六、项目计划日志:

              周活动总结表

    姓名:张莹荧                                      日期:2016-03-26

    日期/任务    听课     编写程序    阅读课本   考研复习                        日总计  
    周日3.20   60 120 120     300
    周一 300   30 120     450
    周二 300 30 30 120     480
    周三 200 180   180     560
    周四 300 30    120     450
    周五 100 180 30       310
    周六     30        30
    周总结 1200 480 240 660     2580

    阶段时间和效率                      周数:3

    不包括上一周在内的累计时间

    总计 1200 480 240 660       2580
    平均 1200 480 240 660     2580
    最大 1200 480 240 660     2580
    最小 1200  480 240 660     2580

    以前各周的累计时间

    总计 1200 480 240 660       2580
    平均 1200 480 240 660     2580
    最大 1200 480 240 660     2580
    最小 1200 480 240 660     2580

    七、时间记录日志:

      学生:张莹荧                                              日期:2016-03-26

      教师:王建民                                              课程: PSP  

    日期 开始时间 结束时间 中断时间 净时间 活动 备注
    3.22

    14:30

    16:10

    16:00

    17:40

    0

    0

    90

    90

    编程

    阅读课本

     中间上网、休息
    3.23

    8:00

    14:00

    12:00

    15:50

    40

    10

    200

    100

    上课 课间休息
    3.24

    14:30

    19:00

    17:40

    19:30

    10

    0

    180

    30

    编程

    阅读课本

    中间休息
    3.25

    12:30

    19:00

    13:30

    19:30

    0

    0

    60

    30

    编程

    阅读课本

    八、缺陷记录日志:

      学生: 张莹荧,李俏                                                           

      日期: 2016-03-26 

      教员:  王建民                                                                           

      程序号:  3  

     日期  编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
     3.24  1 计算 设计 编译 10min  
    描述:计算不出结果。
     3.24  2 结果 编码 编译 5min  
    描述:没有考虑纯负数数组。
     3.24  3 算法 编码 查资料、问同学 30min  
    描述:时间复杂度不符合要求。
     
     
     
     
     
     
     
     
     
     
     
     
     
    九、结对开发队友: 
      李俏 信1301-2班 20132912
      博客地址:http://www.cnblogs.com/Aliqiao/
      工作照:
      
      
  • 相关阅读:
    敏捷21天打卡-AARRR模型
    敏捷21天打卡-精益产品开发最佳实践 之 “AB测试"
    21天敏捷打卡-MVP
    敏捷21天打卡-精益产品开发最佳实践 之 “电梯演讲"
    敏捷21天打卡-精益画布
    敏捷21天打卡--精益产品开发
    21天敏捷打卡--敏捷方法实现
    敏捷21天打卡-在敏捷环境中交付
    敏捷21天打卡-创建敏捷环境
    敏捷21天打卡-生命周期
  • 原文地址:https://www.cnblogs.com/zhyying/p/5321646.html
Copyright © 2020-2023  润新知