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

作业要求:

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

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

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

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

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

 #include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void main()
{
     int a[1000],b,c,d=0,i,j,k,t=-10000,o=-10000,n,m;
     cout<<"请输入数值范围:"<<endl;
     cin>>b>>c;
     cout<<"数组元素为:"<<endl;
     srand(unsigned(time(0)));
     for (i=0;i<1000;i++)
     {
         a[i]=rand()%(c-b+1)+b;
         cout<<a[i]<<" ";
     }
     for (i=0;i<1000;i++)
     {
         for (j=i;j<1000;j++)
         {
              d=0;
              for (k=i;k<=j;k++)
              {
                   d=d+a[k];
              }
              if (d>t) {t=d;n=i;m=j;}
         }
         if (t>o) o=t;
     }
     cout<<endl<<"最大子数组的和:"<<endl;
     for (i=n;i<=m;i++)
     {
         if (a[i]>=0)
         {
              cout<<a[i];
         }
         else cout<<"("<<a[i]<<")";
         if (i!=m) cout<<"+";
         else cout<<"=";
     }
     cout<<o<<endl;
}

posted on 2018-10-14 16:41  顾彼  阅读(96)  评论(0)    收藏  举报

导航