返回一个二维整形数组的子数组的最大和

实验要求: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;
}
运行截图
 实验总结  本次试验是上次求一维整数最大子数组的和的升华,将整数改成二维数组,基本思路与一维数组相似,加入循环将最大子数组上界下降循环求出。实验伙伴   (李鹏,谷豪磊)
 

 

猜你喜欢

转载自www.cnblogs.com/guhaolei97/p/9825402.html
今日推荐