最大数组BT

一、题目:返回一个整数组中的最大子数组的和(加强版)

二、课题要求:

要求程序能够处理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/

猜你喜欢

转载自www.cnblogs.com/hyjht/p/9787501.html