求数组中最大子数组的和
一、程序要求
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/)