题目:给定n个整数(可以为负数),求其子段和的最大值。(子段和即连续的几个整数的和)
例如:-2,11,4,13,-5,-2的最大子段和为20
简单分析:最大子段和必定是以正数开始,正数结束;
#include<iostream>
using namespace std;
int main()
{
int i,j,n,max=0,temp;//n个数
cout<<"请输入n:";
cin>>n;
int a[n];//存数
cout<<"请输入"<<n<<"个数:";
for(i=0; i<n; i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
if(a[i]>0) //最大字段一定以正数开始,正数结束
{
temp=a[i];
for(j=i+1;j<n;j++)
{
if(temp+a[j]<0) break;
else temp+=a[j];
}
j=j-1;
while(a[j]<0)//保证以正数结束
{
temp-=a[j];
j--;
}
if(temp>max) max=temp;
}
}
cout<<"最大子段和为:"<<max<<endl;
return 0;
}
运行结果截图:
如果有需要的话,可以把最大子段和的开始下标和结束下标做标记。