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