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

1、题目:

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

2、要求:

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

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

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

3.开发过程及思路:

    我的搭档是吴论,刚开始我们两个想的都比较简单而且比较统一,只是想用一个for循环来输出每组的和,在用一个比较的函数来求出最大值。但是我们的想法太简单,后来经过我们两人的商讨,决定用循环的嵌套来实现每一组数值的求和。在比较函数中我们俩也出现了分歧,一开始他想把比较函数放在循环中,temp的值每次定义也放在里边,结果总是输出单个值。最后我们把temp 的初值定义在了主函数前边,实现了程序的正常运行。

4.程序代码:

#include<iostream.h>

int main()

{

 

    int a[10];

 

    int m;           //m是每组个数

 

    int *sum=new int[10];
    cout<<"请输入数组:"<<endl;

 

    cout<<"*********************************"<<endl;

 

    for(int i=0;i<10;i++)

 

    {

 

        cin>>a[i];

 

    }

 

    cout<<"*********************************"<<endl;

 

    cout<<"请输入每组个数:"<<endl;

 

    cin>>m;

 

    cout<<"*********************************"<<endl;

 

    int temp=0;

 

    for(int n=0;n<m;n++)

 

    {

 

        temp=temp+a[n];

 

    }

 

    for(int k=0;k<=(10-m);k++)

 

    {

 

        sum[k]=0;

 

        for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数        {

 

            sum[k]=sum[k]+a[j];

 

        }

 

        if(sum[k]>temp)

 

        {

 

            temp=sum[k];   

 

        }   

 

    }

 

    cout<<"最大和为: "<<temp<<endl;

 

    cout<<"*********************************"<<endl;

 

    return 0;

 

}

  

5.运行结果截图:

6.感想:

    两个人结组开发,在思路上能够互相借鉴,有个人进行讨论也能加快程序的编写速度。最让我感受深刻的就是有的时候自己一个人编程没有特别大的动力和积极性,遇到一个困难总是调不出来的话就容易失去信心而放弃。两个人一起来完成这个项目的话,调动了我的积极性,总是觉得不能在集体里不干活,两个人一起来解决一个问题,思路也会很活跃,很专心。所以能在很少的时间里完成这个程序。 

 

posted on 2016-03-24 16:58  与诚  阅读(176)  评论(1编辑  收藏  举报