zoukankan      html  css  js  c++  java
  • 返回一个二维整形数组中的最大子数组的和(随机二维整形数组)

    一、题目:返回一个二维整数数组中的最大子数组的和(随机二维整形数组)

    二、课题要求:

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

    二维数组中连续的一个子矩阵组成一个子数组,没个子数组都有一个和;

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

    三、结对编程要求:

    两人结对完成编程任务;

    一人主要负责程序分析,代码编程;

    一人负责代码复审和代码测试计划。

    四、设计思路

      定义一个二维数组,并对其进行随机生成,定义为int32类型,用遍历方法进行计算每个子数组的和,并对其进行比较,结果输出最大子数组的和。

    五、程序代码

    #include <iostream>
    #include <time.h>
    using namespace std;
    void main()
    {
        int x,y,i,j,m=0,A[100][100];
        cout<<"请输入矩阵的行数和列数:";            //输入随机二维整形数组的行数和列数
        cin>>x>>y;
        if(x>100||y>100)
        {
            cout<<"超过行列数范围,请重新输入:";    //保证程序健壮性,超过100行或100列重新输入
            cin>>x>>y;
            cout<<endl;
        }
        int sum[100]={0},max=0,result=A[0][0];
    
    
        srand((int)time(0));                        //获得随机二维整形数组
        cout<<"所得随机矩阵如下:"<<endl;
        for(i=0;i<x;i++)
        {
            for(j=0;j<y;j++)
            {
                A[i][j]=-rand()%36+25;
                cout<<A[i][j]<<'	';
            }
            cout<<endl;
        }
    
    
        for(i=0;i<x;i++)                            //进行二维数组中子数组的和计算及比较
        {
            while(m+i<x)
            {
    
                for(j=0;j<y;j++)
                {
                    sum[j]=sum[j]+A[m+i][j];
    
                }
                max=0;
                for(j=0;j<y;j++)
                {
                    if(max+sum[j]>sum[j])
                    {
                        max=max+sum[j];
                    }
                    else
                    {
                        max=sum[j];
                    }
                    if(max>result)
                    {
                        result=max;
                    }
                }
                m++;
            }
    
            m=0;
            for(j=0;j<y;j++)
            {
                sum[j]=0;
            }
    
        }
    
        cout<<result;                                //获得最大子数组的和
    }

    六、运行结果

    ①行列数在100范围以内,直接运行

    ②超过100范围时重新输入

    六、收获总结

      经过这次结对练习,对结对练习有了更进一步的认识与熟悉,并对程序进行健壮性保护。

    七、时间记录日志

    时间记录日志
    日期 开始时间 结束时间 中断时间 净时间 活动
    10.20 19:00  21:00 40分钟 80分钟 梳理编程思路,进行三次编写调试
    10.21 20:00 22:00 20分钟 100分钟 编写代码调试,编写博客园

    八、组员

      组员博客:姬浩桐:http://www.cnblogs.com/hyjht/

      组员博客:祁    军:http://www.cnblogs.com/qijun1120/

  • 相关阅读:
    vue项目中npm安装sass,less,stylus
    jQueryniceScroll滚动条错位问题
    基于github发布 个人网站/博客
    【转载】预处器的对比——Sass、LESS和Stylus
    元素,布局方式,BFC和清除浮动
    使用git向github中添加项目并更新(备忘录)
    nginx 之 grok 过滤
    gitlab 同步小脚本
    svn同步小脚本
    使用pip命令自动生成项目安装依赖清单
  • 原文地址:https://www.cnblogs.com/qijun1120/p/9827211.html
Copyright © 2011-2022 走看看