返回一个整数数组中最大子数组的和。

一、程序要求

       1.必须能处理1000个元素;

       2.每个元素是int32类型的,出现子数组之和大于整型的最大范围会出现什么情况;

       3.输入一个整型数组,数组里面有正数也有负数;

       4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

       5.求所有子数组的和最大值。要求时间复杂度为O(n)。

二、编程思路

        要求能处理1000个元素,就可随机生成IntNum个正负数,使IntNum 大于1000,引入一个常量记录累加的和buffer,用cont1计算vuffer进行求和的数值个数,cont2计算for语句进行的运算次数,如果累加和小于0,buffer重新初始化为0,sum始终记录下存在的最大和,计算子数组的和的最大值。

        编程代码

#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[],auto &sum)

{

      auto 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=buffer;

            }

            if(count1>IntNum||count2>IntNum*2)

            {  

                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");

    }

}

三、运行截图

 

 四、实验心得

        本次对数组程序的编码,加深了我对数组的认识,调用了函数,掌握的随机rang的使用方法,同时通过和伙伴的合作,认识到了合作在开发中的重要性,为以后的编程开发提供了宝贵的经验,给我们很大帮助。

五、结对照片

 

 
posted on 2018-10-14 15:47  princeHai  阅读(158)  评论(0)    收藏  举报