1、题目:
返回一个整数数组中最大子数组的和。
2、要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
3.开发过程及思路:
我的搭档是范德一,我们在开始准备实验的时候都认为通过两次循环来存储数组的值,而且实现的也比较顺利,因为在之前我们做过相似的实验,在后面的求和的过程也比较一致,但是在求最大的和的时候,我们遇到了问题,由于循环结构和条件结构比较多,使得我们在设置和的初始值时嵌套的不合适,每一次循环都会重置和的值,后来经过我们的研究,将初始值放到循环结构的外部,才使问题得到解决。
4.程序代码:
#include<iostream.h> int main() { int a[10]; int m; //m是每组个数 int *sum=new int[10]; cout<<"请输入数组:"<<endl; cout<<"*********************************"<<endl; for(int i=0;i<10;i++) { cin>>a[i]; } cout<<"*********************************"<<endl; cout<<"请输入每组个数:"<<endl; cin>>m; cout<<"*********************************"<<endl; int temp=0; for(int n=0;n<m;n++) { temp=temp+a[n]; } for(int k=0;k<=(10-m);k++) { sum[k]=0; for(int j=k;j<(k+m);j++) //a[k]是每组第一个数 { sum[k]=sum[k]+a[j]; } if(sum[k]>temp) { temp=sum[k]; } } cout<<"最大和为: "<<temp<<endl; cout<<"*********************************"<<endl; return 0; }
5.运行结果截图
6.合作感受
通过本次合作实验,让我体会到了合作的力量,对于这次实验而言,一个人完成其实并不难,只是时间长短的问题,但是两个人合作使得实验的进度有很大的提升,而且两个人合作的时候也会出现分歧,但是我觉得分歧是好事,因为出现分歧,使得彼此之间有了更多的交流,一个人的知识和技能往往是不够的,只有通过更多的交流才能学习到彼此的长处,在本次实验中我在一开始认为和的初始值应该放到循环体的内部,但在几次的调试之后,我们发现无法正确的比较出最后的结果,在几次研究之后,我们交流了一下思想,发现确实应该把初始值的设定放到循环体的外部,才使得程序运行正常。
7.结队成员合照