题目
求一维数组最大子数组和
要求:1000个数以上,整数
二.设计思路
最大子数组很好找到,但是子数组和的溢出问题很难解决。
经过不断的思考,我得出了结论:
溢出是程程序设计者设计时的不足所带来的错误。所以设计者要在编码时便高度警惕,预防溢出的发生,这才是最本质的解决问题的方法。就本题而言,我们设置了元素最大个数,以及其它输入要求,尽量避免溢出的发生。1000个数相加可以实现,但非要取1000个最大的数相加,那样的计算没有意义,不会在我们的生活学习中出现,这属于科研问题,交给大神们来解决吧。
程序源代码:
#include <iostream.h> #include <stdlib.h> #define MAX_LEN 2000 int main() { int i,j; int len,max; int VALUE_MAX=2147483580; int sum=0;//求和变量 do{ cout<<"请输入数组元素个数(小于2000):"; cin>>len; }while( (len>MAX_LEN) || len<=0); int* Array=new int[len];//开辟数组空间 for(i=0;i<len;i++) Array[i]=rand()%1000; cout<<endl; max=Array[0]; for( i=0;i<len;i++) { sum=0; for(j=i;j<len;j++) { sum=sum+Array[j]; if(sum>max&&sum<VALUE_MAX) max=sum; else if(sum>VALUE_MAX) break; } } cout<<"最大子数组的和为:"<<max<<endl; delete []Array; return 0; }
程序运行截图:
本对照片:
太菜了,还是低调一点吧。
实验感想:
上图来源与csdn,我还是没看懂。
时间: 2024-10-13 11:37:43