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

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

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

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

#include <iostream.h>
intmain()
{
    inta[7][7];//定义一个3*6的二维数组
    intmax;
    ints;//求和
    intcount;
    intb[7][8];
    cout<<"请输入二维数组(7*7)中的元素:"<<endl;
    for(inti=0;i<7;i++)
    {
        for(intj=0;j<7;j++)
        {
            cin>>a[i][j];
        }
    }
    for(i=0;i<7;i++)
    {
        count=0;
        for(intj=0;j<7;j++)
        {
            s=0;
            for(intl=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(intj=0;j<8;j++)
    {
        for(i=0;i<7;i++)
        {
            s=0;
            for(intr=0;r<7-i;r++)
            {
                s=s+b[r+i][j];
                if(max<s)
                {
                    max=s;
                }
            }
        }
    }
    cout<<"最大子数组为:"<<max<<endl;
    cout<<endl;
    return0;
}

  截图:

代码: