[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

时间:2022-10-25 23:12:53

一。

在主函数中实现二维数组的输入、

代码主要函数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.运行结果

[软件工程]  查找二维数组最大子数组的之和  郭莉莉&李亚文