zoukankan      html  css  js  c++  java
  • 结对开发之《返回一个整数数组中最大子数组的和》

    一、题目要求

    题目:返回一个整数数组中最大子数组的和。

    要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

                如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。 同时返回最大子数组的位置。 

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

    结对编程要求: 两人结对完成编程任务。

                              一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。 

                              发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。

                            (截止时间4月15日晚18:00之前)

    二、设计思路

           本次合作设计思路非常的简单易懂,即第一次以数组的第一个元素为字数组的第一个元素,依次往下加,第二轮以数组的第二个元素为字数组的第一个元素,再依次往下加,原来数组的第一个元素设置为最后一个元素。以此类推,即每次将数组的最后一个元素当做数组的第一个元素这样就形成了循环数组。

    三、代码

    复制代码
    #include<iostream>
    #include<time.h>
    #define n 5
    using namespace std;
    
    void main()
    {
        int a[n],i,j,w=0,b[n][n],p1=0,p2=0,t,m;
    
    
        srand((int)time(0));
    
        //数组的元素值由随机函数产生
        for(i=0;i<n;i++)
        {
            a[i]=-rand()%36+25;
        }
    
        //输出数组的元素值
        for(i=0;i<n;i++)
        {
            cout<<a[i]<<endl;
        }
    
        //求子数组
        for(i=0;i<n;i++)
        {
            m=i;
            w=0;
            j=0;
            while(j<=n-1)
            {
                w+=a[m];
                b[i][j]=w;
                m++;
                if(m>n-1)
                {
                    m=0;
                }
                j++;
            }
        }
    
        t=b[0][0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(b[i][j]>t)
                {
                    t=b[i][j];
                    p1=i;
                    p2=j;
                }
            }
        }
    
        cout<<"最大子数组的值为:"<<t<<endl;
        cout<<"子数组中元素的下标为:"<<endl;
    
        i=0;
    
        while(i<=p2)
        {
            cout<<p1<<"  ";
            p1++;
            if(p1>=n)
            {
                p1=0;
            }
            i++;
        }
    
        cout<<endl;
    }
    复制代码

    四、程序运行结果

    五、总结

          这次程序编写的思路比较简单,因为有了之前的一维数组最大值的程序,所以就在那个程序上做了一些改动,改动并不太大。以后在解决比较难的问题时,会尽量的把大问题化成一个一个的小问题依次解决。就像这个环形数组一样,如果一开始就编写环形数组,可能会觉得费力,但是在有了之前一维数组的基础上再去编写,就显得不那么难解决了。在编写比较复杂的程序时,设计思路要由小至大,编程的过程要大化小。

    六、工作照

  • 相关阅读:
    mysql 新用户添加和权限
    分治法
    插入排序
    猴子分桃问题
    关于PHP面向对象 静态方法的疑问
    php中static 静态变量和普通变量的区别
    php函数引用返回
    redis 限制请求次数的写法
    cas单点登录认证原理
    聚簇索引和非聚簇索引
  • 原文地址:https://www.cnblogs.com/meimiaozi/p/4429119.html
Copyright © 2011-2022 走看看