一、程序题目

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

二、程序要求

  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/
  工作照: