一。
在主函数中实现二维数组的输入、
代码主要函数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.运行结果