求一个二维数组所有子数组和的最大值(郭少周,陈泽)

小组成员:陈泽 郭少周

设计流程:

 

 

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

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

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

程序设计:定义两个数组w和z,先通过w数组算出最大数,再通过z数组算出最大子数组和。

遇到问题:1.不明确二维数组如何定义。

                    2.不清楚二维数组最大子数组如何计算。

                    3.z数组的列数设计上出现问题。

解决方案:1.查找网络资料学习二维数组c语言定义及其相关知识。

                    2.通过大神指点z数组列数应比w数组列数多一。

                    3.组员之间能冷静处理相关问题,互相提出建议弥补对方不足点。

编码:

 

 #include <iostream.h>
int main()
{
    int w[4][5];//定义出4*5的二维数组
    int max;
    int s;
    int count;
    int z[4][6];
    cout<<"请写出你的二维数组(4*5)中的元素:"<<endl;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<5;j++)
        {
            cin>>w[i][j];
        }
    }
    for(i=0;i<4;i++)
    {
        count=0;
        for(int j=0;j<5;j++)
        {
            s=0;
            for(int l=0;l<5-j;l++)
            {
                s=s+w[i][j+l];
                z[i][count+l]=s;
            }
            count=count+5-j;
        }
    }
    //求出最大数
    max=z[0][0];
    for(int j=0;j<6;j++)
    {
        for(i=0;i<4;i++)
        {
            s=0;
            for(int r=0;r<4-i;r++)
            {
                s=s+z[r+i][j];
                if(max<s)
                {
                    max=s;
                }
            }
        }
    }
    cout<<"该二维数组的最大子数组和为:"<<max<<endl;
    cout<<endl;
    return 0;
运行结果:  1.输入的数组为:(4*5)
                                                  5 7 -4 3 6
                                                  2 -5 -6 9 1
                                                  3 7 5 4 -7
                                                  1 3 5 -5 6
                      2.计算结果:该二维数组的最大子数组为40
                       3.计算结果截图:
 

心得:团结就是力量,仔细斟酌王老师ppt中人与人沟通的方法,提建议的方法,对自己帮助很大,使得组员之间工作事半功倍,矛盾轻松化解。另外编程方面还是一如既往地渣,有很大的不足还需努力。                             

           

 

 

posted @ 2018-10-21 17:49  哪嘎有猴  阅读(375)  评论(0编辑  收藏  举报