结对项目——最大子数组

求数组中最大子数组的和

一、程序要求

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)

 3030    60

周一

1203030   180

周二

 3030   60

周三

 3030   60

周四

120 30   150

周五

 18030   210

周六

 6030   120

周总结

240360

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/)

转载于:https://www.cnblogs.com/Aliqiao/p/5321866.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值