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

实验要求:

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;
}
运行截图
 

实验总结

  本次试验是上次求一维整数最大子数组的和的升华,将整数改成二维数组,基本思路与一维数组相似,加入循环将最大子数组上界下降循环求出。

实验伙伴   (李鹏,谷豪磊)

 

 

 

 

posted @ 2018-10-21 16:00  唯心123  阅读(163)  评论(0编辑  收藏  举报