zoukankan      html  css  js  c++  java
  • 程序结对开发之求最大子矩阵

    一、题目

    1、返回一个二维数组中最大子数组的和。

    2、要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

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

    程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是:

    数组的行数,数组的列数,每一行的元素,  (用逗号分开)每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数

    将上述题目的各个结果转换成图形界面显示。

    3、结对开发要求: 

        两人结对完成编程任务。一人主要负责程序分析,代码编程。一人负责代码复审和代码测试计划。

       发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。  

    二、设计思路
    起初我和小伙伴一看到题就想到了这个想法,先比较数组中单个元素的最大值,之后,再比较行相邻两个数相加的最大值,再比较列相邻两个数相加的最大值,即以第一行,第一列元素为中心,逐渐向整个矩阵扩展。我相信很多同学都会有和我们一样的想法。最后,比较各个情况最大值,得出最终结果。但是呢,后来老师又叫了两个同学为我们讲解,我们显然似懂非懂,没有理解透,所以还是坚持了我们最初的想法,虽然代码不够简洁,但是我们还是会改进的。

    三、代码

    #include<iostream.h>
    int max[6]={0};//存储最大值
    int b[6]={1,1,1,1,1,1};//存储最大值的行坐标
    int c[6]={1,1,1,1,1,1};//存储最大值的列坐标
    int a[10][10];//存储文件中的数据
    int line;     
    int row; 
    int main()
    {
        int i,j;
        int line=2;
        int row=3;
        void biggest();
        cout<<"请输入数组元素:(两行三列)"<<endl;
        for(i=0;i<line;i++)
        {
            for(j=0;j<row;j++)
            {
                cin>>a[i][j];
            }
        }
        cout<<"数组元素为:"<<endl;
        for(i=0;i<line;i++)
        {
            for(j=0;j<row;j++)
            {
                cout<<a[i][j]<<"	";
            }
            cout<<endl;
        }
        biggest();
        return 0;
    }     
    void biggest()//算出最大值
    {
        int i,j;
        int k=0;
        int Max;
        max[0]=a[0][0];
        for(i=1;i<line;i++)
        {
            for(j=0;j<row;j++)
            {
                if(max[0]<a[i][j])
                {
                    max[0]=a[i][j];
                    b[0]=i+1;
                    c[0]=j+1;
                }
            }
        }
        max[1]=a[0][0]+a[0][1];
        for(i=0;i<line;i++)
        {
            for(j=0;j+1<row;j++)
            {
                if(max[1]<(a[i][j]+a[i][j+1]))
                {
                    max[1]=a[i][j]+a[i][j+1];
                    b[1]=i+1;
                    c[1]=j+1;
                }
            }
        }
        max[2]=a[0][0]+a[1][0];
        for(j=0;j<row;j++)
        {
            for(i=0;i+1<line;i++)
            {
                if(max[2]<(a[i][j]+a[i+1][j]))
                {
                    max[2]=a[i][j]+a[i+1][j];
                    b[2]=i+1;
                    c[2]=j+1;
                }
            }
        }
        max[3]=a[0][0]+a[0][1]+a[0][2];
        for(i=0;i<line;i++)
        {
            for(j=0;j+2<row;j++)
            {
                if(max[3]<(a[i][j]+a[i][j+1]+a[i][j+2]))
                {
                    max[3]=a[i][j]+a[i][j+1]+a[i][j+2];
                    b[3]=i+1;
                    c[3]=j+1;
                }
            }
        }
        max[4]=a[0][0]+a[0][1]+a[1][0]+a[1][1];
        for(i=0;i+1<line;i++)
        {
            for(j=0;j+1<row;j++)
            {
                if(max[4]<(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]))
                {
                    max[4]=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
                    b[4]=i+1;
                    c[4]=i+1;
                }
            }
        }
        max[5]=a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2];
        b[5]=1;
        c[5]=1;
        Max=max[0];
        for(i=0;i<6;i++)
        {
            if(Max<max[i])
            {
                Max=max[i];
                k=i;
            }
        }
        cout<<"最大值为"<<Max<<endl;
        
    }

    四、截图

    五、心得体会

    古人言,车到山前必有路啊,柳暗花明又一村啊,我觉得真的是对的,从前编程序不会编是因为从来没有仔细认真的思考然后动手去编。

    现在不同了,每周都有了事情去干,感觉生活的很有价值,因为所有的努力都可以在程序上得到见证,不再像以前一样没事就看韩剧了。

    结对开发呢,乍一听非常的高大上,但是实际上却很有人情味的一种开发方式,这是和小伙伴的第二次合作啦,过程呢,当然是两个人一起

    同甘共苦啦,再没有人比小伙伴更能感同身受,这让我有一种路上有人相伴的感觉,让晦涩的编程之路不是那么的黑暗寂寞,就像一米阳光。

    在本次开发中,代码部分是我敲的,最原始的思路是我俩一起很有默契的想得,中间的过程还是她想得比较周到,我只是有个大概的思路,平时我

    会比较马虎,她就很严谨,这就像化学反应一样酸碱中和,变成有用的平和的水。

    题目我俩都觉得比较难,但是经过几天的编与想,还是弄出结果来了,很开心,有图有真相。

  • 相关阅读:
    指针与数组的区别 —— 《C语言深度剖析》读书心得
    console ouput 与 重定向输出 效率对比
    First day in 阿里
    TestNG 使用入门教程
    Spring简单使用简介
    玩转Spring JUnit+mockito+powermock单元测试(使用详解)
    Spring Boot Junit 单元测试详解
    spring @Value注入map、List、Bean、static变量方式及详细使用
    单元测试Junit使用详解
    Mockito & PowerMock详解
  • 原文地址:https://www.cnblogs.com/tangxiandi/p/4366786.html
Copyright © 2011-2022 走看看