码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-14 19:12:10      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:一个   要求   编写程序   范围   返回   那是   length   str   name   

实验人员:毕文强  常啸帆

实验要求:必须能处理1000个元素;

                  每个元素是int32类型的,出现子数组之和大于显示最大范围会出现什么情况;

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

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

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

实验过程:在本次实验中,我们两人通过所学的c++知识来编写程序,在过程中我们发现了一下问题并逐步解决
在编写的过程中,首先会发现数组中少了一个元素,那是因为在循环时length写成了length-1,
而且max没有初始化,如果初始化为0,那么都是负数时结果为0,这个结果是错误的,原因在于负数都比0小,
解决方法就是max初始化为数组第一个元素的值。并且在测试时,针对数组为空抛出异常,进行处理。

 #include<iostream>
 using namespace std;
 int max(int a,int b)
 {
     if(a>b)
    {
        return a;
    }
     else
    {
      return b;
    }
}
int maxsum(int a[], int n)
{    int i;
    int maxsofar = 0;  //maxsofar记录到目前为止的的最大值
   int maxendinghere = 0; //maxendinghere记录从当前位置开始往前几个连续的数的和的最大值
    for (i = 0; i < n; i++)
     {
         maxendinghere = max(maxendinghere + a[i], 0);
        maxsofar = max(maxsofar, maxendinghere);
    }
     return maxsofar;
 }
 int main()
 {
     int n, i=0;
     cout<<"请输入个数:";
     cin>>n;
    cout<<"请输入数组:";
     int a[1000]={0};
     for(i=0;i<n;i++) 
    {
       cin>>a[i];
     }
     int max=maxsum(a, n);
     cout << "最大子数组的和为:" << max << endl;
     return 0;
 }
技术分享图片技术分享图片

 

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

标签:一个   要求   编写程序   范围   返回   那是   length   str   name   

原文地址:https://www.cnblogs.com/BWQ123/p/9787015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!