结对项目——最大子数组

求数组中最大子数组的和

一、程序要求

1、返回一个整数数组中最大子数组的和;

2、输入一个整数数组,数组中有正数也有负数;

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

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

二、程序设计思想

    数组的长度和各个元素由键盘键入。先将各元素累加,每加一个数,看结果是否为0,若为0,重置结果,并且结果与最大子数组和(简称最大和)比较,若有更大的和,就保存较大的结果到最大和中。若最大和与结果的值均为0,说明数组为负数数组,最大子数组即为最大元素。

三、源程序

//李俏、张莹荧,2016.3.21
//求整数数组的最大子数组的和

#include<iostream>
using namespace std;

int main()
{
    int arrlength,i;
    int j;
    int maxsum=0,sum=0;
    int arr[100];

    cout<<"请输入数组长度:";
    cin>>arrlength;
    if(arr==NULL||arrlength==0)
    {
        //exit(1);
        return 0;
    }

    cout<<"请输入数组元素:";
    for(i=0;i<arrlength;i++)
    {
        cin>>arr[i];
    }
 
    maxsum=0;
    sum=0;
    for(i=0;i<arrlength;i++)
    {
        sum=sum+arr[i];//累加

        if(sum<0)      //当前和小于0,重置为0
        {
            sum=0;
        }

        if(sum>maxsum) // 当前和大于最大和,则重置最大和 
        {
            maxsum=sum;
        }
    }

    if(maxsum==0)      //maxsum=0,说明数组中的数值均为负数
    {
        maxsum=arr[0];
        for(i=1;i<arrlength;i++)
        {
            if(arr[i]>maxsum)//求出负数数组的最大值
            {
                maxsum=arr[i];
            }
        }
    }
    cout<<"最大子数组的和为:"<<maxsum<<endl;

    return 0;

    //for(i=0;i<arrlength;i++)
    //{
    //    sum=0;
    //    for(j=0;j<arrlength;j++)
    //    {
    //        sum += arr[j];

    //        if(sum<0)      //当前和小于0,重置为0
    //        {
    //            sum=0;
    //        }

    //        if(sum>maxsum)
    //        {
    //            maxsum=sum;
    //        }
    //    }
    //}
    //cout<<"最大子数组的和为:"<<maxsum<<endl;
    //return 0;
}

 

四、结果截图

五、项目计划日志

周活动总结表  

姓名:李俏          日期:2016年3月19日

日期   任务 听课  编写程序 阅读课本 准备考试     日总计

周日(3.20)

  30 30        60

周一

120 30 30       180

周二

  30 30       60

周三

  30 30       60

周四

120   30       150

周五

  180 30       210

周六

  60 30       120

周总结

240 360

210

      810

 

 

 

 

 

 

 

 

 

 

 

 

 

六、时间记录表:

学生:   李 俏                         日期 :2016年3月12日 

教师:   王建民                        课程 :软件工程      

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.21

16:30

17:00

30

编写程序 

作业 

 

20:10

20:40

30

阅读

作业

 3.22

19:10

19:50

10

30

编写程序

作业

 

20:00

20:30 

30

阅读

 作业

 3.23

14:30

15:30

30min

30

编写程序

 作业

 

20:00

20:30 

30

阅读

 作业

3.24

18:50

19:20

30

编写程序

作业

 

20:00

20:30

30

阅读

 作业

 3.25

13:20

18:00

100 

180

编写程序

 作业

 

21:10

21:40

30

阅读

 作业

 3.26

12:00

 13:30

 30min

60

编写程序

 作业

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

七、缺陷记录日志:

学生        李俏,张莹荧    

日期       20163月25日   

教员          王建民       

程序号    2  

日期  编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
 3.24  1 计算 设计 编译 10min  
描述: 计算不出结果。
 3.24  2 结果 编码 编译 5min  
描述: 没有考虑纯负数数组。
 3.24  3 算法 编码 查资料、问同学 30min  
描述:时间复杂度不符合要求。

 

 

 

 

 

 

 

 

 

 

 

八、工作照片 

小伙伴:张莹荧(http://www.cnblogs.com/zhyying/)

posted @ 2016-03-26 07:51  灯下等花开  阅读(218)  评论(1编辑  收藏  举报