结对开发2-二维数组子矩阵和最大值

一、设计思路

(1)利用上一次的一维数组求最大值作为子函数。

(2)求每行的最大值。

(3)1、2行,2、3行,1、2、3行对应加变为一维数组,调用子函数求最大值。

(4)比较所有最大值,求出二维数组子矩阵和最大值。

二、源代码

//作者:王炳午、董龙洋。日期:2015.3.24.
#include <iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int maxMax( int amax[])     //求最大
{
	int i,j;
	int max;
	int max_max;
	max = 0;
	max_max= 0;
	for (i = 0; i < 5; i++)
	{
		max += amax[i];
		if (max < 0)
			max = 0;
		if (max > max_max)
			max_max= max;
	}
	if (max_max== 0)
	{
		for (int i=0;i<5;i++)
		{
			if (max_max==0)  
			{  
				max_max=amax[i];  
			}  
			else
			{
				if (max_max<amax[i])  
				{  
					max_max=amax[i];
				}
			}
		}
	}
	return max_max;
}

int main()
{
	int a[3][5];
	int i;
	int j;
	int overmax;
	int max ;
	int max_max;
	int bmax[100];
	int amax[10];
	cout<<"---------------------求数组中子数组和的最大值的小程序----------------------"<<endl;
	cout<<endl;
	cout<<"得到的二维随机整数数组(3行5列)如下:"<<endl;
	srand((unsigned)time(NULL));//随机数种子为当前计算机时间。
	
	for (i = 0; i < 3; i++)      //输入数组中的每个元素
		for (j = 0; j < 5; j++)
			a[i][j] =(rand() % 21 - 10);
	
	for (i = 0; i < 3; i++)        //每行数据比较;
	{
		max=0;
		max_max=0;
		for (j = 0; j < 5; j++)
		{
			max += a[i][j];
			if (max < 0)
				max = 0;
			if (max > max_max)
				max_max = max;
		}
		if (max_max == 0)
		{
			max_max = a[0][0];
			for (j = 0; j < 5; j++)
			{
				if (max_max < a[i][j])
					max_max = a[i][j];
			}
		}
		bmax[i] = max_max;	       //0到2
	}
	for (j = 0; j < 5; j++)        //上中组合两两组合保存在amax数组
	{

		amax[j] = a[0][j] + a[1][j];
                                  	
	}
	bmax[3] =maxMax(amax); 

	for (j = 0; j < 5; j++)        //中下组合两两组合保存在amax数组
	{

		amax[j] = a[1][j] + a[2][j];

	}
	bmax[4] = maxMax(amax);

	for (j = 0; j < 5; j++)        //上中下组合两两组合保存在amax数组
	{

		amax[j] = a[1][j] + a[2][j] +a[0][j];

	}
	bmax[5] = maxMax(amax);

	
	


   for (i = 0; i < 3; i++)     //输出数组中每个元素
		for (j = 0; j < 5; j++)
		{
			cout << a[i][j] << "\t";
			if ((j + 1) % 5 == 0)
			{
				cout << endl;
			}
		}
		//求二维数组子矩阵最大值。
   overmax = bmax[0];
   for (i = 0; i < 6; i++)
	{
		if (overmax < bmax[i])
		{
			overmax = bmax[i];
		}
	}
	cout <<"子矩阵和最大值为:"<< overmax <<endl;
/*	for(i=0;i<6;i++)
	{
		cout<<bmax[i]<<"\t";
	}*/
	return 0;
}
三、运行截图
四、心得体会
这次主要是队友编写代码,我俩一起修改调试,主要错误函数调用和逻辑错误。举例如下:
正确代码:
overmax = bmax[0];
   for (i = 0; i < 6; i++)
	{
		if (overmax < bmax[i])
		{
			overmax = bmax[i];
		}
	}
错误代码:
for (i = 0; i < 6; i++)
{
  overmax = bmax[0];
  if (overmax < bmax[i]) 
{
overmax = bmax[i];
}
错误不分大小,有错就离正确结果很远。。。。。
五、照片

  

posted @ 2015-03-26 17:42  诡术  阅读(134)  评论(1编辑  收藏  举报