一、题目要求
1.1要求程序必须能处理1000 个元素;
1.2每个元素是int32 类型的;
1.3输入一个整形数组,数组里有正数也有负数。
1.4数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
1.5求所有子数组的和的最大值。要求时间复杂度为O(n)。
二、源代码
#include<iostream> #include<time.h> #include<conio.h> #define N 100000 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%5==4) cout<<endl; else cout<<‘\t‘; } } void SelMax(int IntNum,int A[], int &sum) { int buffer=0;//引入一个常量记录累加的和 for(int j=0;j<IntNum;j++) { buffer+=A[j]; if(buffer<0)//如果累加和小于0,buffer重新初始化为0 { buffer=0; } if(sum<buffer)//sum始终记录下存在的最大和 { sum=buffer; } } } void main() { int IntNum; int A[N]; int q=0; while(q==0) { int 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"); } }
三、运行截图
四、实验总结
本次实验主要目的在于测试本程序健壮性,使用了大数据进行测试,如果溢出则进行报错。
时间: 2024-10-18 03:15:58