题目:求一个指定矩阵中的子矩阵的和的最大值
负责人:赵顺杰 马帅强
在王老师布置该课题的课上时间,赵顺杰和我在纸上讨论了方法,在课下把这个方法补充完整:
我们先定义了一个3*3的矩阵,首先是子矩阵中元素数为1的矩阵的和,也就是元素自己,然后是元素数分别为2,3,4,6,9的子矩阵。定义一个变量max,将每一个子矩阵的和与max比较,较大的数赋值给max,最后输出max。
#include<iostream.h> void main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,d=0; int max=0; for(i=0;i<=2;i++)//2个 { for(j=0;j<=1;j++) max=(max>a[i][j]+a[i][j+1])?max:a[i][j]+a[i][j+1]; } for(j=0;j<=2;j++) { for(i=0;i<=1;i++) max=(max>a[i][j]+a[i+1][j])?max:a[i][j]+a[i+1][j]; } for(i=0;i<=2;i++)//1个 { for(j=0;j<=2;j++) max=(max>a[i][j])?max:a[i][j]; } for(i=0;i<=2;i++)//3个 { j=0; max=(max>a[i][j]+a[i][j+1]+a[i][j+2])?max:a[i][j]+a[i][j+1]+a[i][j+2]; } for(j=0;j<=2;j++) { i=0; max=(max>a[i][j]+a[i+1][j]+a[i+2][j])?max:a[i][j]+a[i+1][j]+a[i+2][j]; } for(i=0;i<=2;i++)//9个 { for(j=0;j<=2;j++) { d=d+a[i][j]; } } max=(max>d)?max:d; for(i=0;i<=1;i++)//6个 { j=0; max=(max>a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j]+a[i+1][j+1]+a[i+1][j+2])?max:a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j]+a[i+1][j+1]+a[i+1][j+2]; } for(j=0;j<=1;j++) { i=0; max=(max>a[j][i]+a[j][i+1]+a[j][i+2]+a[j+1][i]+a[j+1][i+1]+a[j+1][i+2])?max:a[j][i]+a[j][i+1]+a[j][i+2]+a[j+1][i]+a[j+1][i+1]+a[j+1][i+2]; } for(i=0;i<=1;i++)//4个 { for(j=0;j<=1;j++) { int c=0; c=c+a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]; max=(max>c)?max:c; } } cout<<"子数组的和的最大值是: "<<max<<endl; }