题目:返回一个整数数组中最大子数组的和
2016-03-26 17:07 LUXIN123 阅读(276) 评论(4) 编辑 收藏 举报1 #include<iostream> 2 #include<time.h> 3 #define N 100 //设定数组的最大个数为100 4 using namespace std; 5 int main() 6 { 7 srand((unsigned)time(NULL)); 8 int num[N],arr[N][2]; //num[]用于存放数组,arr[i][0]是指不包括num[i]之前最大子数组的和,arr[i][1]是指包括num[i]的最大子数组的和 9 int Num,Max; //Num是指数组的长度,Max用来存放最大和 10 cout<<"请输入数组的长度:"<<endl; 11 cin>>Num; 12 cout<<"这个数组为:"<<endl; 13 for(int i=0;i<Num;i++) //随机生成一个数组 14 { 15 num[i]=-20+rand()%50; 16 } 17 for(int i=0;i<Num;i++) 18 { 19 cout<<num[i]<<" "; 20 } 21 cout<<endl; 22 cout<<"请输入这个数组的最大子数组和为:"<<endl; 23 arr[1][0]=0; 24 arr[1][1]=num[1]; //初始化arr[i][0],arr[i][1] 25 for(int i=0;i<Num;i++) //采用递归的方式来求子数组的最大和 26 { 27 arr[i][0]=max(arr[i-1][0],arr[i-1][1]); //调用max函数计算不包含num[i]子数组之和最大值 28 arr[i][1]=max(arr[i-1][1]+num[i],num[i]); //调用max函数计算包含num[i]子数组之和最大值 29 Max=max(arr[i][0],arr[i][1]); 30 } 31 cout<<Max<<endl; 32 }
一、实验思路:
1.定义一个整型数组num[n],随机生成数组中元素的值
2.定义一个二维数组arr[n][2],arr[i][0]不包含num[i]子数组之和最大值,arr[i][1]包含num[i]子数组之和最大值
3.随机生成数组num[n]
4.采用循环递归的方式,调用max函数计算arr[i][0],arr[i][1],计算包含数组元素本身和不包含本身的前子数组最大和的情况,将他们之中的最大值赋给Max
二、实验测试:
三、实验日志
项目记录 日志:
|
听课 |
编写程序 |
阅读相关书籍 |
网上查找资料 |
日总计 |
周一 |
2 |
0 |
0 |
0 |
2 |
周二 |
0 |
1 |
1 |
0 |
2 |
周三 |
0 |
3 |
0.5 |
1 |
4.5 |
周四 |
2 |
0.5 |
0.5 |
0 |
3 |
周五 |
0 |
3 |
0.5 |
1 |
4.5 |
周六 |
0 |
1 |
0 |
1 |
2 |
周日 |
|
|
|
|
|
周总计 |
4 |
8.5 |
2.5 |
3 |
18 |
时间记录日志
日期 |
开始 时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
星期一 |
14:00 |
16:00 |
10 |
100 |
上课 |
软件工程 |
星期二 |
16:00 |
17:00 |
0 |
60 |
编程 |
数组问题 |
|
19:00 |
20:00 |
0 |
60 |
阅读书籍
|
构建之法 |
星期三 |
13:00 |
17:00 |
60 |
180 |
编程 |
|
|
19:00 |
21:00 |
30 |
90 |
阅读书籍 |
构建之法 |
星期四 |
14:00 |
16:00 |
10 |
100 |
上课 |
软件工程 |
|
19:00 |
20:00 |
0 |
60 |
编程 查找资料 |
数组问题 |
星期五 |
13:00 |
17:00 |
60 |
180 |
编程 |
数组问题 |
|
17:00 |
18:00 |
0 |
60 |
上网 |
查资料 |
星期六 |
12:00 |
14:00 |
30 |
90 |
编程 |
数组问题 |
缺陷记录日志:
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复阶段 |
修复缺陷 |
3/23 |
1 |
求最大和阶段 |
|
|
30min |
|
考虑到时间复杂度的问题,不能用两个嵌套的循环,还有算法的设计,采用循环递归 |
||||||
2 |
数组长度的宏定义 |
|
|
2min |
|
|
数组长度在宏定义是应该用N,二不是小写 |
四、实验总结:
通过此次实验,是我的实验思路更加拓宽了一些,以前我设想实验思路时,总是找最麻烦的方法,想的比较肤浅,然而实现的算法比较复杂,在这次实验中,我借鉴老师上课讲的方法,和队友运用循环递归的方法很简单的就编出来了这个程序,这次实验不算难,就是看实现的算法 的复杂性;
还有和队友的合作缩短了我们的编程时间,提高了效率,我体会到了组队合作的便利性。
我的伙伴 张瑶:http://www.cnblogs.com/zhangyao999/