标签:
组员:燕亚峰 20122914
王童博 20122823
一、题目及要求:
题目:返回一个整数数组中最大子数组的和。
要求程序必须能处理1000个元素
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
二、设计思路:
定义无符号长整型数组,长度设为1000;若所求子数组最大和的过程中出现sum〉LONG_MAX;则为溢出。输出溢出,程序无法计算结果。
三、源程序
#include<iostream.h> #include<stdlib.h> unsigned long max1(unsigned long arry[],int length) { unsigned long sum=arry[0]; unsigned long maxsum=arry[0]; int flag =0; for(int i=1;i<length;i++) { if(sum<0) { sum=arry[i]; } else { sum=sum+arry[i]; if(sum>LONG_MAX) { cout<<"溢出,出错,无法计算"<<endl; flag=1; break; } } if(maxsum<=sum) { maxsum=sum; } } if(flag==1) { cout<<"无返回值"; return 0; } else { return maxsum; } } int main() { srand((unsigned)time(0)); unsigned long a[1000]; for(int i=0;i<1000;i++) { a[i]=(unsigned long)rand()%5+4294967290; cout<<a[i]<<" "; } unsigned long q=max1(a,1000); cout<<endl; cout<<q; return 0; }
四、截图
五、实验心得
这次实验要求实现1000个数,经过和童博商量,决定通过定义长度为1000的数组这个办法。定义无符号32位长整型,只验证了正数溢出的情况,对于负数溢出,没有做出验证这是个缺陷。我感觉一个团队不仅要团结,要么每一个队员都努力,同事还要有自己的特色。
六、合照
标签:
原文地址:http://www.cnblogs.com/yanyafeng/p/4378671.html