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

要求:

1.输入一个二维整形数组,数组里有正数也有负数。

2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。

3.求所有子数组的和的最大值,要求时间复杂度为O(n)。

合作过程:首先一人结合上次一维数组分析这次二维数组的设计思路:先求每一行最大子数的和,如然后比较最大和,一直到最后一行,然后开始编程;另一个人负责找错误,改错,和最后的测试。体会:我们体会到这个作业的设计思路和编程还有最后的测试都很重要,所以两人的贡献都是相当的,遇到问题我们会一起讨论或者询问别人。

代码:

运河桥 2018/10/21 16:37:25
#include <iostream.h>
int main()
{
    int a[7][7];//定义一个3*6的二维数组
    int max;
    int s;//求和
    int count;
    int b[7][8];
    cout<<"请输入二维数组(7*7)中的元素:"<<endl;
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<7;j++)
        {
            cin>>a[i][j];
        }
    }
    for(i=0;i<7;i++)
    {
        count=0;
        for(int j=0;j<7;j++)
        {
            s=0;
            for(int l=0;l<7-j;l++)
            {
                s=s+a[i][j+l];
                b[i][count+l]=s;
            }
            count=count+7-j;
        }
    }
    //求最大数
    max=b[0][0];
    for(int j=0;j<8;j++)
    {
        for(i=0;i<7;i++)
        {
            s=0;
            for(int r=0;r<7-i;r++)
            {
                s=s+b[r+i][j];
                if(max<s)
                {
                    max=s;
                }
            }
        }
    }
    cout<<"最大子数组为:"<<max<<endl;
    cout<<endl;
    return 0;
}

  截图:

 

posted @ 2018-10-21 17:26  吃牛肉  阅读(122)  评论(0编辑  收藏  举报