最大子段和
题目内容:
给定长度为n的整数序列,a[1…n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-
2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].
输入描述
第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数
输出描述
计算出n个整数中连续k个数的最大和
输入样例
5
1 2 3 4 5
7
6 -5 5 8 -13 5 7
输出样例
15
14*/
#include<stdio.h>
int sum(int A[],int i,int j){//A[]中多个元素组成的一个新的数
int k,s=0;
for(k=i;k<=j;k++){
s+=A[k];
}
return s;
}
int MaxSum(int A[],int n){//找出所有多个元素组成的新数中最大的拿一个值
int i,j,s,maxs;
maxs=A[0];//初始化最大值为A[0]
for(i=0;i<n;i++){
for(j=0;j<n;j++){
s=sum(A,i,j);
if(s>maxs)//如果后面多个元素组成的s大于maxs则交换值存入
maxs = s;
}
}
return maxs;
}
int main()
{
int n,i,A[1000],result;
while(~scanf("%d",&n)){
for(i=0;i<n;i++){
scanf("%d",&A[i]);
}
result=MaxSum(A,n);
printf("%d\n",result);
}
return 0;
}