【问题描述】给定一个数字序列A1,A2,…,An,均为整数,求i,j(1≤i≤j≤n),使得Ai+…+Aj最大。编写函数找出这个最大和。(1<n<10)
【输入说明】输入有两行
第一行,一位正整数n,表示序列的长度;
第二行,输入n个整数,以空格分隔。
【输出说明】输出一行,即最大和。
【输入样例】
6
-2 11 -4 13 -5 -2
【输出样例】
20
【样例说明】
在6个数中,从2到4个数据组成的子序列之和最大,11-4+13=20,输出20
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n]; //定义a数组,存储输入的数值
for(int i=0;i<n;i++) //输入数据
{
cin>>a[i];
}
int max=a[0]; //令起始的max为第一项
for(int x=0;x<n;x++)
{
int sum=a[x]; //每次循环起始令sum项数和=起始项
if(sum>max) max=sum; //比较大小,令max取最大值
for(int y=x+1;y<n;y++) //进行循环加项数
{
sum=sum+a[y]; //sum=前面的项数加上后一项
if(sum>max) max=sum; //比较大小,令max取最大值
}
} //整个循环结束时,已进行a[n]的所有子序列比较,去除最大值
cout<<max;
return 0;
}