您的位置:首页 > 其它

最大子数组一

2016-03-26 13:52 232 查看

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

要求:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

设计思想:

  利用动态规划的思想,将该问题转化成计算包含当前数组元素以及不包含当前数组元素的子数组之间的较大者,并向前递推,最后变成计算第一个元素和0之间的较大者,从而解决了该问题。

源代码:

//计算一列数组中最大子数组之和,李青,胡金辉
#include<iostream>
using namespace std;
#define max(x,y)  ( x>y?x:y )
int main()
{
int i,length=0,list[1000];//定义循环变量、数组长度、数组
int sum1;//记录包含当前数组元素的最大子数组之和
int sum2;//记录不包含当前数组元素的最大子数组之和
cout << "请输入数组元素:" << endl;
while ((cin >> list[length++] ) && getchar() != '\n');
cout << "你输入了" << length << "个数" << endl;

sum1 = list[0];
sum2 = 0;
for (i = 1; i < length; i++)
{
sum2 = max(sum2, sum1);
sum1 = max(sum1 + list[i], list[i] );
}
sum1 = max(sum2, sum1);
cout << "你输入的数组中最大子数组的值为:"<<sum1<<endl;
return 0;
}


结果截图:





总结:

  本次实验主要运用到了动态规划的思想,一开始并不是太清楚该思想是什么意思,后来在老师的解释下明白了,最后写出了程序,总的来说这次还是有很大收获的。

项目计划总结:

日期/任务听课编程阅读相关书籍网上查找资料日总计
周一100201010140
周二301040
周三1003020150
周四10030130
周五302050
周六303060
周日
周总结2002407060570
时间记录日志

日期开始时间结束时间中断时间净时间活动备注
3/2114:0015:5010100听课软件工程上课
16:0016:20020编程
16:3016:40010阅读相关书籍《构建之法》
17:0017:10010网上查找资料
3/2219:0019:30030编程
19:4019:50010网上查找资料
3/2314:0016:0020100编程
16:3017:00030阅读相关书籍《梦断代码》
17:1017:30020网上查找资料
3/2414:0015:5010100听课软件工程上课
19:0019:30030编程
3/2519:0019:30030编程
20:0020:20020网上查找资料
3/269:009:30030编程
10:0010:30030阅读相关书籍《构建之法》
缺陷记录日志:

日期编号类型引入阶段排除阶段修复时间备注
3/22120编码编译1min未定义变量sum2
3/25220编码编译1min循环嵌套输出错误
结对开发伙伴:胡金辉 http://www.cnblogs.com/hujinhui/
工作照:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: