返回一个整数数组中最大的子数组的和。
遍历一遍,找连续的正数求和,同时比较求和的大小,最后输出最大的和就可以。
源代码:
#include <iostream>
#include<time.h>
using namespace std;
int maxSum(int*a,int n)
{
int sum=0;
int b=0;
for(int i=0;i<n;i++)
{
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}
#include<time.h>
using namespace std;
int maxSum(int*a,int n)
{
int sum=0;
int b=0;
for(int i=0;i<n;i++)
{
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}
int main()
{
int n=1000,k=0;
int*a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=rand()%20-10;
}
for( i=0;i<n;i++)
{
cout<<a[i]<<"";
}
for(i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和为:"<<k<<endl;
}
else
{
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
{
int n=1000,k=0;
int*a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=rand()%20-10;
}
for( i=0;i<n;i++)
{
cout<<a[i]<<"";
}
for(i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和为:"<<k<<endl;
}
else
{
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
cout<<"输入数组长度:"<<endl;
cin>>n;
cout<<"请输入数组元素:"<<endl;
for(i=0;i<n;i++)
{
cin>>a[i];
}
cin>>n;
cout<<"请输入数组元素:"<<endl;
for(i=0;i<n;i++)
{
cin>>a[i];
}
cout<<endl;
for( i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和为:"<<k<<endl;
}
else
{
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
return 0;
}
for( i=0;i<n;i++)
{
if(a[i]<0)
{
k++;
}
}
if(n==k)
{
for(int i=1;i<n;i++)
{
k=a[0];
if(a[i]>k)
{
k=a[i];
}
}
cout<<"最大和为:"<<k<<endl;
}
else
{
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
return 0;
}