课堂练习----一个整数数组中最大子数组的和(2)
2016-03-26 15:11
295 查看
题目:
返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。 求所有子数组的和的最大值。
设计思想:
这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,通过for循环,在每次循环中,把数组中的元素作为数组的起始位置,并把后面的元素依次放到另外一个数组中。对于新生成的数组,通过上一次的方法求出新数组的最大子数组的和,然后通过比较所有数组的最大子数组和,求出初始数组最大子数组的和。
2 4 7 -10
4 7 -10 2
7 -10 2 4
-10 2 4 7
代码:
截图:
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327162535417-554733960.png)
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327162547511-2028575039.png)
总结:更加熟悉了数据结构与算法的学习,认为这门课程是非常重要的基础,要好好学习多加练习,更加熟悉两个人的结对开发,一起讨论,一起想解决方案,一起网上查找算法,更加锻炼了结对开发的能力。
项目计划总结:
时间记录日志
缺陷记录日志:
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327164710136-1859916565.jpg)
小组成员:杨超群 http://www.cnblogs.com/linumy/
返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。 求所有子数组的和的最大值。
设计思想:
这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,通过for循环,在每次循环中,把数组中的元素作为数组的起始位置,并把后面的元素依次放到另外一个数组中。对于新生成的数组,通过上一次的方法求出新数组的最大子数组的和,然后通过比较所有数组的最大子数组和,求出初始数组最大子数组的和。
2 4 7 -10
4 7 -10 2
7 -10 2 4
-10 2 4 7
代码:
#include<iostream> using namespace std; #define N 100 int main() { int p,num,value,max,count=0; int val ; //原始数组 int Array ; //存放新生成的数组 int ArrayMax ; //存放每个数组最大值 int ArrayFisrtLast ; //存放最大子数组的每个元素 int ArrayNum ; //存放最大子数组元素的个数 cout<<"输入数的个数:"; cin>>num; for(int i=0;i<num;i++) //输入元素 { cin>>val[i]; } for(int i=0;i<num;i++) { int firstNum=0,lastNum=0,q=0; //最大子数组开始位置(firstNum),结束的位置(lastNum) value=0; p=i; for(int k=0;k<num;k++) //重新开辟一个新数组Array,存放以原始数组的每个元素开头的数组 { p=p%num; Array[k]=val[p]; p++; } max=0; for(int j=0;j<num;j++) //找出最大子数组 { value=value+Array[j]; if(value>max) //累加和大于max,累加和赋值给max { max=value; lastNum=j; } if(value<0) // 当前和小于0,重置为0 { value=0; firstNum=j+1; } } if(max<0) // 最大和依然为0,说明数组中所有元素都为负值 { max=val[0]; firstNum=0; lastNum=0; for(int j=0;j<num;j++) { if(max<Array[j]) { max=val[j]; firstNum=j; lastNum=j; } } } ArrayMax[count]=max; for(int m=firstNum;m<=lastNum;m++) { ArrayFisrtLast[count][q]= Array[m]; q++; } ArrayNum[count][0]=lastNum-firstNum+1; count++; } max=ArrayMax[0]; int n=0; for(int i=0;i<count;i++) { if(max<ArrayMax[i]) { max=ArrayMax[i]; n=i; } } cout<<"最大子数组是:"; for(int i=0;i<ArrayNum [0];i++) { cout<<ArrayFisrtLast [i]<<" "; } cout<<endl; cout<<"最大子数组的和为:"; cout<<max<<endl; return 0; }
截图:
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327162535417-554733960.png)
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327162547511-2028575039.png)
总结:更加熟悉了数据结构与算法的学习,认为这门课程是非常重要的基础,要好好学习多加练习,更加熟悉两个人的结对开发,一起讨论,一起想解决方案,一起网上查找算法,更加锻炼了结对开发的能力。
项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 25 | 25 | 15 | 165 |
周二 | 30 | 35 | 25 | 90 | |
周三 | 60 | 15 | 35 | 110 | |
周四 | 100 | 30 | 30 | 25 | 185 |
周五 | 180 | 15 | 195 | ||
周六 | 60 | 15 | 75 | ||
周日 | 15 | 15 | |||
周总计 | 200 | 325 | 180 | 130 | 835 |
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
17:10 | 17:20 | 10 | 阅读书籍 | 《构建之法》《梦断代码》 | ||
21:00 | 21:25 | 20 | 网上查找资料 | |||
3/22 | 14:00 | 15:00 | 10 | 110 | 结对编程 | 编写老师布置的作业 |
16:00 | 17:00 | 10 | 110 | 看书 | 《构建之法》《梦断代码》 | |
3/23 | 21:00 | 21:30 | 30 | 结对编程 | 编写老师布置的作业 | |
3/24 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
3/25 | 16:00 | 18:00 | 120 | 结对编程 | 编写老师布置的作业 | |
3/26 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》《梦断代码》 | |
3/27 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》《梦断代码》 |
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月22日 | 1 | 编码 | 编码 | 0.2min | ||
缺少头文件 | ||||||
2 | 编码 | 运行 | 3min | |||
重复使用变量i,导致无限运行 | ||||||
3月25日 | 3 | 编码 | 编译 | 1min | ||
if条件中用了“=”运算符 | ||||||
4 | 编码 | 编译 | 1min | |||
缺少; | ||||||
5 | 编码 | 编译 | 0.2min | |||
for的结尾再次使用i++,导致i加了两次 |
![](http://images2015.cnblogs.com/blog/761299/201603/761299-20160327164710136-1859916565.jpg)
小组成员:杨超群 http://www.cnblogs.com/linumy/
相关文章推荐
- 高可用系统在点评的实践与经验--讲座思考
- Keil MDK从未有过的详细使用讲解
- 读源码原来这么有意思
- Linux USB 驱动开发(三)—— 编写USB 驱动程序
- 快排源代码
- HDOJ 1316 How Many Fibs?
- python--基础学习(六)sqlite数据库基本操作
- 标签、选择符、超链接及SEO笔记
- js闭包
- iOS_高效开发之道
- Mason 入门例子4 --- 增加UI
- Win7下CentOS7安装指南
- 对软件工程这门学科的理解
- SAS取消正在运行的语句——Run Cancel
- 代码初识、盒模型详解笔记
- 梳理caffe代码syncedmem(二)
- iOS 代码的折叠快捷键
- poj2985 The k-th Largest Group 【树状数组求第K大】
- jQuery
- html <dl> 标签