要求:
1.要求程序必须能处理1000个元素
2.每个元素是是int32类型的,出现字数组之和大于整型表示的最大范围会出现什么情况
3.输入一个整型数组,数组里有正有负
4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
5.求所有子数组的和的最大值。要求时间复杂度为0(n)
编码:
#include<iostream> #include<time.h> #include<conio.h> #define N 1000 using namespace std; void RandIn(int IntNum,int A[]) //随机生成数组 { cout<<"整数内容"<<endl; for(int i=0;i<IntNum;i++) { A[i]=rand()-rand(); cout<<A[i]; if(i%15==4) cout<<endl; else cout<<'\t'; } } void SelMax(int IntNum,int A[],auto &sum) { int buffer=0; int count1=0; //求和的数值个数 int count2=0; //进行的运算次数 for(int j=0;j<=IntNum;j++) { if(j==IntNum) { j=0; } buffer+=A[j]; count1++; count2++; if(buffer<0) { buffer=0; count1=0; } if(sum<buffer)//sum始终记录下存在的最大和 { sum=buffer; } { break; } } } void main() { int IntNum; int A[N]; int q=0; while(q==0) { auto sum=0; srand((unsigned)time(NULL)); cout<<"请输入数组元素的个数:"; cin>>IntNum; RandIn(IntNum,A); SelMax(IntNum,A,sum); cout<<endl; cout<<sum<<endl; cout<<"是否继续测试(输入0则继续否则停止)"; cin>>q; system("cls"); } }
无移除结果:
有溢出结果:
求和函数*4294967296 这样运行之后就会溢出
6.实验总结:
通过这次实验明白了在设计中要考虑溢出情况,要不然会出错误。一定会更好的。
7.小组合照: