返回一个二维整数数组中最大子数组的和
Posted lipeng0520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回一个二维整数数组中最大子数组的和相关的知识,希望对你有一定的参考价值。
实验要求:
1输入一个二维整形数组,数组中有正数也有负数。
2二维数组中连续的一个子矩阵组成一个子数组,每个 子数组都有一个和。
求所有子数组的和的最大值。
实验思路:
1.首先确定子数组的最大上界,从第一行依次向下,规定最大子数组的范围。
2.确定子数组的行列类型。
3.用一维子数组的方法求出子数组的最大和,求出最大值。
4.最后将子数组的最大上界下降1,再循环。
实验代码
#include<iostream>
using namespace std;
void main ()
{
int i,j,m,n,l=0,A[100][100];
cout<<"输入矩阵行列数";
cin>>m>>n;
if(m>100||n>100)
{
cout<<"请重新输入:";
cin>>m>>n;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>A[i][j];
}
}
int sum[100]={0},max=0,result=A[0][0];
for(i=0;i<m;i++)
{
while(l+i<m)
{
for(j=0;j<n;j++)
{
sum[j]=sum[j]+A[l+i][j];
}
max=0;
for(j=0;j<n;j++)
{
if(max+sum[j]>sum[j])
{
max=max+sum[j];
}
else
{
max=sum[j];
}
if(max>result)
{
result=max;
}
}
l++;
}
l=0;
for(j=0;j<n;j++)
{
sum[j]=0;
}
}
cout<<result;
}
using namespace std;
void main ()
{
int i,j,m,n,l=0,A[100][100];
cout<<"输入矩阵行列数";
cin>>m>>n;
if(m>100||n>100)
{
cout<<"请重新输入:";
cin>>m>>n;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>A[i][j];
}
}
int sum[100]={0},max=0,result=A[0][0];
for(i=0;i<m;i++)
{
while(l+i<m)
{
for(j=0;j<n;j++)
{
sum[j]=sum[j]+A[l+i][j];
}
max=0;
for(j=0;j<n;j++)
{
if(max+sum[j]>sum[j])
{
max=max+sum[j];
}
else
{
max=sum[j];
}
if(max>result)
{
result=max;
}
}
l++;
}
l=0;
for(j=0;j<n;j++)
{
sum[j]=0;
}
}
cout<<result;
}
运行截图
实验总结
本次试验是上次求一维整数最大子数组的和的升华,将整数改成二维数组,基本思路与一维数组相似,加入循环将最大子数组上界下降循环求出。
实验伙伴 (李鹏,谷豪磊)
以上是关于返回一个二维整数数组中最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章