一、题目:返回一个整数组中的最大子数组的和(加强版)
二、课题要求:
要求程序能够处理1000个元素;
没个元素是int32类型的;
输入一个整形数组,数组里有正数也有负数;
数组中连续的一个或多个整数组成一个子数组,没个子数组都有一和;
求所有子数组的和的最大值,要求时间复杂度为O(n)。
三、设计思路
把数组定义为1000个元素,并定义为int32类型,当我们需要越界时需要将数组整体乘上2^32=4294967296。
四、程序代码
#include <iostream> #include<stdlib.h> #include<time.h> using namespace std; int main() { int i; int a[1000]; int max = 0; int b = 0; srand(time(NULL)); cout<<"生成整数组:"<<endl; for (i = 0; i<1000; i++) { a[i] = rand(); } for (i = 0; i<1000; i++) { cout << a[i] << ‘\t‘; } cout << endl; for (i = 0; i < 1000; i++) { b += a[i]; if (b < 0) b = 0; if (b > max) max = b; } if (max == 0) { max = a[0]; for (i = 0; i < 1000; i++) { if (max < a[i]) { max = a[i]; } } } cout <<"最大子数组:"<< max << endl; return 0; }
当需要越界时,数组乘4294967296
a[i] = rand()*4294967296;
五、运行结果
①正常运行
②越界运行
六、收获总结
经过这次课题设计,对计算机算法又有了一个深层次的认识,通过for语句循环,以及if语句判断是否符合程序需求。
七、时间记录日志
八、组员图片
组员博客:姬浩桐:http://www.cnblogs.com/hyjht/
组员博客:祁 军:http://www.cnblogs.com/qijun1120/
原文地址:https://www.cnblogs.com/hyjht/p/9787501.html
时间: 2024-10-15 16:48:35