由一位数组到求二维数组中的最大子数组 ;开始是想的是把每一行,每一列,中最大的求出来;只有有一个倒置矩阵就能和实现,后来老师一说这个子数可以是几行几列;
瞬间就感到不是那么容易,开始我和我的好基友就是想依次遍历;for循环;华飞说这样麻烦,会有重复的部分;但是并不影响最大的结果;对于老师的提示:最大的子数组有可能出现在该数组中最大的那个数周围;或正整数最多的行或列;我们也讨论了,但是感觉还是不是很对。。。。纠结最后还是依次遍历吧.....
程序如下: #include<iostream> using namespace std; #define N 100 int main() { int row,column; int sum,max; int i,k,j,t,m,x,n,s; int a[N][N],b[N][N],c[N][N],d[N][N]; int length,line; cout<<"请输入数组的行数:"<<endl; cin>>row; cout<<"请输入数组的列数:"<<endl; cin>>column; cout<<"请输入数组元素:"<<endl; for(i=0;i<row;i++) { for(j=0;j<column;j++) { cin>>a[i][j]; } } for(i=0;i<row;i++) { for(j=0;j<column;j++) { max=a[i][j]; for(m=1;m<=column-j;m++) { sum=0; length=1; line=i; for(x=0;x<row;x++) { for(k=j;k<j+m;k++) { sum=sum+a[x][k]; } if(max<=sum) { max=sum; length=m; line=x; b[i][j]=max; c[i][j]=length; d[i][j]=line; } } } } } max=b[0][0]; t=0; n=0; for(i=0;i<row;i++) { for(j=0;j<column;j++) { if(max<b[i][j]) { max=b[i][j]; t=i; n=j; } } } cout<<"最大子数组和是:"; cout<<max<<endl; cout<<"子序列为"<<endl; for(i=t;i<=d[t][n];i++) { for(j=n;j<n+c[t][n];j++) { cout<<a[i][j]<<' '; } cout<<endl; } return 0; }