返回一个整数组中最大子数组的和
作业要求:
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;
}
#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;
}

