[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
一。
在主函数中实现二维数组的输入、
代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组,
在循环中算出之和,编写过程中行列的值赋值错误,但经过调试查找出来了;后来在输出最大子数组的地方遇到麻烦,
考虑不周全用普遍的 if(j%n==0)cout<<endl;来进行换行,导致出现错误,应改为if(j%n==m),m为最大子数组的第一列,
源代码:
#include <iostream> using namespace std; int a[100][100]; int maxson(int M,int N) { int xmin,xmax,ymin,ymax; int m,n,p,q,t; int i,j,max=a[0][0],sum=0; for(xmin=0;xmin<M;xmin++) for(xmax=xmin+1;xmax<=M;xmax++) for(ymin=0;ymin<N;ymin++) for(ymax=ymin+1;ymax<=M;ymax++) { sum=0; for(j=xmin;j<xmax;j++) for(i=ymin;i<ymax;i++) { sum=a[i][j]+sum; } if(max<sum) { max=sum; m=xmin; n=xmax; p=ymin; q=ymax; } } cout<<"最大子数组为"<<endl; t=n-m; for(i=p;i<q;i++) for(j=m;j<n;j++) { if(j%t==m) cout<<endl; cout<<a[i][j]<<'\t'; } cout<<endl; return max; } void main() { int M=0,N=0,i,j; while(!M) //检查输入的M,N否则重新输 { cout<<"数组的行数: "; cin>>M; if(M<=0) { M=0; cout<<"行数必须大于0"<<endl; } } while(!N) { cout<<"数组的列数: "; cin>>N; if(N<=0) { cout<<"列数必须大于0"<<endl; N=0; } cout<<"输入数组的值:"; //输入二维数组的值 for(i=0;i<M;i++) for(j=0;j<N;j++) { cin>>a[i][j]; } } cout<<"您输入的数组为:" ; //输出数组 for(i=0;i<M;i++) for(j=0;j<N;j++) { if(j%N==0) cout<<endl; cout<<a[i][j]<<'\t'; } cout<<endl; cout<<"子数组和为:"<<maxson(M,N)<<endl; }
2.运行结果
posted on 2014-03-19 17:20 magic code 李亚文 阅读(205) 评论(0) 编辑 收藏 举报