查找二维数组中子数组之和最大值 郭莉莉&&李亚文

一。

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

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

转载于:https://www.cnblogs.com/guolili/p/3611863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值