结队开发1----最大子数组

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.结队成员合照

posted @ 2015-03-18 20:35  lllittletree  阅读(153)  评论(0)    收藏  举报