数组中最大子数组的和(2)

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

要求: 

要求程序必须能处理1000 个元素;

每个元素是int32 类型的;

输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
组员:陈晨,王颖瑞
我主要负责程序分析,代码编程,在过程中分工明确当然也有适当的讨论总结,相互交流思路做出方案,遇到问题讨论解决。
工作照:
思路:利用随机数产生随机数组,输入控制数组长度,依次计算数组前面数的和如果出现负数则更新使这个数为数组中的下一个数在继续刚才的运算,开始令最大的子数组和为零后与刚刚产生的数组和比较如果比之小则更新最大子数组和的值为比较中较大的数,直到循环结束。而要处理1000个元素以上的元素与元素要求是int32类型,这里的数处理较大当处理数组超过int类型会出现bug。
代码:

#include<iostream>
#include<cmath>
using namespace std;

void main()
{
 int a[250009],b=0,s=0,i,l,n,c=2147483648;
 cout<<"输入数组长度";
 cin>>n;
 for(i=0;i<n;i++)
 {
  l=rand()%2+1;//产生随机数组
  const int q=pow(-1.0,l);
  a[i]=q*rand()%1000000+1;
 }
 for(i=0;i<n;i++) //求子数组和最大值
 { 
  if(b<0)
   b=a[i]; 
  else 
   b+=a[i]; 
  if(s<b) 
   s=b; 
 }
 cout<<endl;
 cout<<s<<endl;
}

截图:

出现的问题:

当数组长度超过250000左右时出现bug,值返回0。

当数组中的数超出int32范围时出现bug,值返回0。

解决方案:利用string或char类型。

总结:

编程时编程规范十分重要,编程规范同样有好多要注意的地方,本次的测试中会出现好多不同的bug,都是编程过程中不注意的地方例如在定义int类型是我们一般就不会考虑int类型的取值,当超过这个范围又会出现什么样的错误,通过此次程序我认识到了编程规范的重要性,其实编程规范体现在很多的小的细节上,我们应该在平时注意养成习惯,正如老师所说将给我们好多的好处。

原文地址:https://www.cnblogs.com/lingxi/p/4377606.html