结对开发之《返回一个二维整数数组中最大子数组的和》

一、题目要求

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

要求: 输入一个二维整形数组,数组里有正数也有负数。 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。

结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四4月9日24:00)

二、编程思路

我们的思路比较简单,采用的是将子矩阵的和全部求出然后比较选出最大值的思路。大体思路确定了,主要就是如何求出以及怎样求出每个子矩阵的和。由于过程比较麻烦,以图片示意:

三、程序代码

#include<iostream>
#include<time.h>
using namespace std;
#define m 3  //m行数
#define n 3  //n列数

void main()
{
	int a[m][n],i,j,b[50];

	srand((int)time(0));

	//数组的值随机产生
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			a[i][j]=-rand()%36+25;
		}
	}	

	//显示数组
	cout<<"矩阵如下:"<<endl;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<a[i][j]<<‘\t‘;
		}
		cout<<endl;
	}

	int c=0,d,e,f,sum=0,sum1=0;

	//计算所有子矩阵的值
	for(i=0;i<m;i++)
	{
		for(f=0;f<n;f++)
		{
			sum=0;
			sum1=0;
		    for(j=f;j<n;j++)
		    {
				sum+=a[i][j];
				b[c]=sum;
				c++;

				sum1=sum;
				for(d=i+1;d<m;d++)
				{
					for(e=f;e<=j;e++)
					{
						sum1+=a[d][e];
					}
					b[c]=sum1;
					c++;
				}
			}
		}
	}

	int max;
	max=b[0];
	for(i=0;i<c;i++)
	{
		if(b[i]>max)
		{
			max=b[i];
		}
	}

	cout<<"该矩阵最大子矩阵的值为:"<<max<<endl;
}

  

四、运行结果截图

五、工作照

六、总结

此次合作主要为陈小倩同学写代码我负责程序后期的复审与测试。设计思路是两个人共同讨论出来的。两个人合作确实要比一个人的效率更高,同时思路也开阔了许多,也更容易发现平时自己一个人不容易发现的问题。通过合作我发现陈小倩同学的程序设计,写代码的思路与我都有很大不同,这也为我打开了另一个新思路。两个人再一次合作能够相互取长补短是一件好事,但是就像老师说的需要经常互换角色,因为在不同的人角色不同他的想法也不一样,最后得出的结果也一定大不相同。此次合作唯一的遗憾就是没有将时间复杂度调整到O(n),我们会再接再厉。

时间: 2024-10-23 08:57:22

结对开发之《返回一个二维整数数组中最大子数组的和》的相关文章

结对开发之返回一个整数数组中最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 二.要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.分工 我选择了领航员的角色,伙伴则是驾驶员职责: 一下是我们的工作照: 四.感想

结对开发_返回一个整数数组中最大子数组的和。

要求:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思路: 本次实验设计,把数组长度定在了5,然后定义一个长度为15的数组,依次存入数组子序列的和,然后用for循环比较出最大的一个,题目就得到了解决.由于课堂编程,并未考虑数组成员特别多的话如何实现. 源代码如下: 1 #include<iostream.h> 2 int main() 3 { 4 int i,a[5],b[15]

返回一个整数组的最大子数组和

#include<iostream>using namespace std;int max(int a,int b){ if(a>b) {return a;}else{ return b;}}int maxsum(int a[],int n){ int i;int maxsofar=0;int maxendinghere=0;for (i=0;i<n;i++){maxendinghere=max(maxendinghere+a[i],0);maxsofar=max(maxsofar

结对开发之返回一个二维整数数组中最大联通子数组的和

一.题目要求 输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.解题思路 先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果. 三.程序代码 2 #include<iostream.h> 3 int main(int argc, char* argv[]

软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 一.设计思想 1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数. 2.从数组中第一个元素a[0]开始,依次计算a[0].a[0]+a[1].a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值. 3.再从数组第二个元素a[1]开始,依

结对开发之《返回一个整数数组中最大子数组的和》

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 1.定义一个大小为10的数组,接受任意十个自然正数: 2.分别将连续的一个数,两个数,......,组合成子数组,分别求出包含一个元素的数组的最大值,两个元素的,三个元素的,......,然后再比较这十组的值,求出最大值,即为所求: 3.单独判断一些特殊的

返回一个整数数组中最大子数组的和。(二人结对编程)

 题目:返回一个整数数组中最大子数组的和. 要求: 1.要求程序必须能处理1000 个元素: 2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: 3.输入一个整型数组,数组里有正数也有负数. 4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 5.求所有子数组的和的最大值.要求时间复杂度为O(n).  设计思想:(1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型.(2)为

返回一个二维整数数组中最大子数组的和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.      二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和.      求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求:两人结对完成编程任务.              一人主要负责程序分析,代码编程.              一人负责代码复审和代码测试计划.              发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照)

《返回一个二维整数数组中最大子数组的和》

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大 两人结对完成编程任务.一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月21日24:00) 二.设计思路 本次实验设计思路非常简单,就