一、题目要求:返回整数数组中最大的子数组的和
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个数组,每个子数组都有一个和。
将数组连成环求最大的数组。
二、设计思路:
这次实验是在上次实验的基础上做的,要将数组组成一个环的话这次实验只需要将数组的内容复制一遍,将数组数量由原来的N变为N+N,定义j用它来保存数组开始的位置数组结束的位置为N+j;定义Array_max[]记录,每一个圆环中的最大的子数组之和,运行结束后,比数组中的最大的数值并输出;其中大数组的保存和输出只需要加上
long long Array_max[1000]
用来生成32位数组:
Array_a[i]=(RAND16 << 16) + RAND16;
三、代码:
1 #include<iostream> 2 #include<time.h> 3 #define RAND16 ((rand()<<1) + (rand()&1)) 4 using namespace std; 5 int main() 6 { 7 srand(time(0)); 8 _int32 Array_a[2000]; 9 long long Array_max[1000];//存放每个子数组的最大数组之和 10 long long arrayOfmax;//存放最后结果最大数 11 int N;//随机生成数组元素个数 12 N=rand()%1000+1; 13 cout<<"The number of array:"<<N<<endl; 14 for(int i=0;i<N;i++) 15 { 16 Array_a[i]=(RAND16 << 16) + RAND16;//生成32位数组元素 17 } 18 //将数组复制一遍加宽数组的长度 19 for(int i=0;i<N;i++) 20 { 21 Array_a[N+i]=Array_a[i]; 22 } 23 for(int i=0;i<N;i++) 24 { 25 cout<<Array_a[i]<<" "; 26 if((i+1)%5==0){cout<<endl;} 27 } 28 cout<<endl; 29 //求每个圆环的N个数组的最大的子数组 30 for(int j=0;j<N;j++) 31 { 32 33 long long max=0; 34 long long sum=0; 35 for(int i=j;i<(N+j);i++) 36 { 37 sum+=Array_a[i];//将每位求和赋给sum 38 if(Array_a[i]>=0) 39 { 40 if(max<sum) 41 { 42 max=sum; 43 } 44 45 } 46 if(sum<0) 47 { 48 sum=0; 49 } 50 } 51 if(max==0) 52 { 53 max=Array_a[0]; 54 for(int i=j;i<N+j;i++) 55 { 56 if(Array_a[i]>max) 57 max=Array_a[i]; 58 } 59 } 60 Array_max[j]=max; 61 } 62 cout<<"The max array is:"; 63 arrayOfmax=Array_max[0]; 64 for(int k=1;k<N;k++) 65 { 66 if(arrayOfmax<Array_max[k]) 67 { 68 arrayOfmax=Array_max[k]; 69 } 70 } 71 cout<<arrayOfmax<<endl; 72 return 0; 73 74 }
四、 截图:
五、 体会:这次实验是在第一次的基础上实现的,只需要做一些小小的改动,用循环来实现就能成功,但是这次实验开始运行还是有很多问题,经过队友的查看发现只是大括号的位置放错了,还是有一些小马虎。~~~~(>_<)~~~~
六、项目计划日志(单位:h)
听课 |
编写程序 |
阅读相关书籍 |
网上查找资料 |
日总计 |
|
周一 |
2 |
0 |
0 |
0 |
2 |
周二 |
0 |
3 |
0 |
0.5 |
3.5 |
周三 |
0 |
3 |
1 |
0 |
4 |
周四 |
2 |
4 |
0 |
0 |
6 |
周五 |
0 |
4 |
1 |
1 |
6 |
周六 |
0 |
3 |
0 |
0 |
3 |
周日 |
0 |
2 |
0 |
0 |
2 |
周总计 |
4 |
19 |
2 |
1.5 |
26.5 |
七、时间记录日志:(单位:min):
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
星期一 |
14:00 |
15:50 |
10 |
100 |
听课 |
软件工程 |
星期二 |
19:00 |
22:00 |
0 |
180 |
网上查找资料 编写程序 |
求最大的数组 |
星期三 |
15:00 |
18:00 |
0 |
180 |
编程和上网查找资料并且调试程序 |
结对编程 |
19:00 |
20:00 |
0 |
60 |
读书 |
构建之法 |
|
星期四 |
14:00 |
15:50 |
10 |
100 |
听课 |
软件工程 |
19:00 |
23:00 |
0 |
240 |
编程 |
求最大数组 |
|
星期五 |
16:00 |
21:00 |
60 |
240 |
编程上网查找资料 |
结对编程 |
21:30 |
22:30 |
0 |
60 |
看书 |
构建之法 |
|
星期六 |
19:00 |
22:00 |
0 |
180 |
编程和写博客 |
求最大数组2 |
星期日 |
19:00 |
20:00 |
0 |
120 |
编写程序和写博客 |
求最大数组2 |
八、缺陷记录日志:
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/23 |
1 |
20 |
编码 |
调试 |
20:00 |
括号输出错误,运算不正确 |
3/24 |
2 |
20 |
编码 |
调试 |
19:00-23:00 |
程序的正确结果数不出来,计算求和不正确,因为将最后的计算和放到大括号里边了 |
3/26 |
3 |
20 |
编码 |
调试 |
10:00 |
括号的丢失和语法的错误。 |
3/27 |
4 |
20 |
编码 |
调试 |
19:00 |
程序最后的位置输出不成功 |