您的位置:首页 > 其它

结对开发4----最大子数组(大数溢出)

2015-03-29 22:11 246 查看
结对成员:范德一,赵永恒

一.题目:

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

二.要求:

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

  每个元素是int32 类型的;

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

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

  求所有子数组的和的最大值。

三.设计思路

在上一次的实验中,我们设置的数组的个数能够很好的进行扩展,所以对于第一个要求处理1000个元素比较容易实现;对于第二个要求,我们主要是想确定最大的数到底有多大,即什么时候会发生溢出的问题,当问题出现时程序怎么处理,通过查阅资料,我们最后确定了程序能够处理的最大数的取值,然后通过输出语句提示数组溢出。

四.源代码

#include<iostream.h>

#include<time.h>

#include<stdlib.h>

int main()

{

srand((unsigned)time(NULL));

int a[1000];

int m;              //m是每组个数

int *sum=new int[1000];

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

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

{

int b;

b=rand()%2;

switch (b)

{

case 0:

a[i]=rand()*350;

break;

case 1:

a[i]=-rand()*100;

break;

}

cout<<a[i]<<"   ";

if((i%10)==9)

cout<<endl;         //每行10个输出,换行

}

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

int he=0;

for(m=1;m<1001;m++)

{

int temp=0;

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

{

temp=temp+a
;

}

for(int k=0;k<=(1000-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];

}

}

if(temp>he)

{

he=temp;

}

}

if(he>2100000000)

{

cout<<"数组溢出!"<<endl;

}

else

{

cout<<"最大子数组的和为: "<<he<<endl;

}

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

return 0;

}


五.运行截图





六、感想

这次实验在随机出现数的那里我们停留了很长时间,主要是不知道rand函数也是有取值范围的。在接组的开发中,我们都有一点自己的想法。最后总结在了一起,尤其是在编程的过程中,我们谁都想往上写一点,一个程序总是在加入自己的设计思路和代码的风格。我觉得一个团队还是应该把风格和规范尽量的一致,才能让团队更好的工作起来。

附:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: