一、设计思路
(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];
}
错误不分大小,有错就离正确结果很远。。。。。
五、照片
