结对项目——最大子数组
求数组中最大子数组的和
一、程序要求
1、返回一个整数数组中最大子数组的和;
2、输入一个整数数组,数组中有正数也有负数;
3、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
4、求所有子数组的和的最大值,要求时间复杂度为O(n);
二、程序设计思想
数组的长度和各个元素由键盘键入。先将各元素累加,每加一个数,看结果是否为0,若为0,重置结果,并且结果与最大子数组和(简称最大和)比较,若有更大的和,就保存较大的结果到最大和中。若最大和与结果的值均为0,说明数组为负数数组,最大子数组即为最大元素。
三、源程序
//李俏、张莹荧,2016.3.21 //求整数数组的最大子数组的和 #include<iostream> using namespace std; int main() { int arrlength,i; int j; int maxsum=0,sum=0; int arr[100]; cout<<"请输入数组长度:"; cin>>arrlength; if(arr==NULL||arrlength==0) { //exit(1); return 0; } cout<<"请输入数组元素:"; for(i=0;i<arrlength;i++) { cin>>arr[i]; } maxsum=0; sum=0; for(i=0;i<arrlength;i++) { sum=sum+arr[i];//累加 if(sum<0) //当前和小于0,重置为0 { sum=0; } if(sum>maxsum) // 当前和大于最大和,则重置最大和 { maxsum=sum; } } if(maxsum==0) //maxsum=0,说明数组中的数值均为负数 { maxsum=arr[0]; for(i=1;i<arrlength;i++) { if(arr[i]>maxsum)//求出负数数组的最大值 { maxsum=arr[i]; } } } cout<<"最大子数组的和为:"<<maxsum<<endl; return 0; //for(i=0;i<arrlength;i++) //{ // sum=0; // for(j=0;j<arrlength;j++) // { // sum += arr[j]; // if(sum<0) //当前和小于0,重置为0 // { // sum=0; // } // if(sum>maxsum) // { // maxsum=sum; // } // } //} //cout<<"最大子数组的和为:"<<maxsum<<endl; //return 0; }
四、结果截图
五、项目计划日志
周活动总结表
姓名:李俏 日期:2016年3月19日
日期 任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | ||
周日(3.20) |
30 | 30 | 60 | ||||
周一 |
120 | 30 | 30 | 180 | |||
周二 |
30 | 30 | 60 | ||||
周三 |
30 | 30 | 60 | ||||
周四 |
120 | 30 | 150 | ||||
周五 |
180 | 30 | 210 | ||||
周六 |
60 | 30 | 120 | ||||
周总结 |
240 | 360 |
210 |
810 |
六、时间记录表:
学生: 李 俏 日期 :2016年3月12日
教师: 王建民 课程 :软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3.21 |
16:30 |
17:00 |
无 |
30 |
编写程序 |
作业 |
|
20:10 |
20:40 |
无 |
30 |
阅读 |
作业 |
3.22 |
19:10 |
19:50 |
10 |
30 |
编写程序 |
作业 |
|
20:00 |
20:30 |
无 |
30 |
阅读 |
作业 |
3.23 |
14:30 |
15:30 |
30min |
30 |
编写程序 |
作业 |
|
20:00 |
20:30 |
无 |
30 |
阅读 |
作业 |
3.24 |
18:50 |
19:20 |
无 |
30 |
编写程序 |
作业 |
|
20:00 |
20:30 |
无 |
30 |
阅读 |
作业 |
3.25 |
13:20 |
18:00 |
100 |
180 |
编写程序 |
作业 |
|
21:10 |
21:40 |
无 |
30 |
阅读 |
作业 |
3.26 |
12:00 |
13:30 |
30min |
60 |
编写程序 |
作业 |
七、缺陷记录日志:
学生 李俏,张莹荧
日期 2016年3月25日
教员 王建民
程序号 2
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.24 | 1 | 计算 | 设计 | 编译 | 10min | |
描述: 计算不出结果。 | ||||||
3.24 | 2 | 结果 | 编码 | 编译 | 5min | |
描述: 没有考虑纯负数数组。 | ||||||
3.24 | 3 | 算法 | 编码 | 查资料、问同学 | 30min | |
描述:时间复杂度不符合要求。 |
八、工作照片
小伙伴:张莹荧(http://www.cnblogs.com/zhyying/)