一、设计思路
(1)利用上一次的一维数组求最大值作为子函数。
(2)求每行的最大值。
(3)1、2行,2、3行,1、2、3行对应加变为一维数组,调用子函数求最大值。
(4)比较所有最大值,求出二维数组子矩阵和最大值。
二、源代码
//作者:王炳午、董龙洋。日期:2015.3.24.#include#include #include 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 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 <
四、心得体会 这次主要是队友编写代码,我俩一起修改调试,主要错误函数调用和逻辑错误。举例如下: 正确代码:
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]; } 错误不分大小,有错就离正确结果很远。。。。。 五、照片