作业要求:
1、输入一个二维整形数组,数组里有正数有负数。
2、二维数组中连续的一个子矩阵组成一个子数组。
3、求所有子数组的和的最大值。
设计思想:
1、将二维数组分解成一维数组,使用一位数组求最大子数组之和的方法。
2、列举出每一个子数组值的大小,然后进行比较。
3、最终求得二维数组最大子数组之和。
出现的问题
1、在开始的时候因为没有理清一维数组和二维数组的关系导致长时间没有找到合适的解决方法。
2、在列举的子数组的时候以为分组方法选的不对导致子数组列举不完全,以致结果出错。
3、程序语言的储备较少以至于有些功能不知道如何用语言实现。
int main()
{
int row, col, i, j;
cout<<"please input the row and col of the array:"<<endl;
cin >> row >> col;
cout<<"please input the data of the array:"<<endl;
for (i=1; i<=row; i++)
for (j=1; j<=col; j++)
cin >> arr[i][j];
for (i=0; i<=row; i++)
Sum[i][0] = 0;
for (j=0; j<=col; j++)
Sum[0][j] = 0;
for (i=1; i<=row; i++)
for (j=1; j<=col; j++)
Sum[i][j] = arr[i][j]+Sum[i-1][j]+Sum[i][j-1]-Sum[i-1][j-1];
int a, c;
long long MaxSum = arr[1][1];
for (a=1; a<=row; a++)
for (c=a; c<=col; c++)
{
long long Tail = MatrixSum(a, 1, c, 1);
for (j=2; j<=col; j++)
{
Tail = max( MatrixSum(a, j, c, j), MatrixSum(a, j, c, j)+Tail);
MaxSum =max(Tail, MaxSum);
}
}
cout <<"最大的子矩阵和为:"<< MaxSum<<endl;
system("pause");
return 0;
}
总结:这是第一次结对编程,对两个人的配合默契程度有一定的要求,两个人要充分运用自己的长处再能使两人同时度过难关。