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

 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/

原文地址:https://www.cnblogs.com/luxin123/p/5322752.html