zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和

    一、程序题目

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

    二、程序要求

      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/
      工作照:
      
      
  • 相关阅读:
    mysql时区设置
    jquery raidio buttion checked unchecked
    mysql定时备份
    丁香园 (http://www.dxy.cn)这个名字听着
    mysql backup solution
    mysql备份
    mysql编码设置
    在Ubuntu中通过源码安装编译安装软件(MySQL篇) 收藏
    社会化分享实现插件,分享到...
    ubuntu 小工具
  • 原文地址:https://www.cnblogs.com/zhyying/p/5321646.html
Copyright © 2011-2022 走看看