一、程序题目
返回一个整数数组中最大子数组的和。
二、程序要求
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 | |
描述:时间复杂度不符合要求。 |