输入一组整数,求出这组数字子序列和中最大值。也就是仅仅要求出最大子序列的和,不必求出最大的那个序列。
比如:
序列:-2 11 -4 13 -5 -2,则最大子序列和为20。
序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16
#include<stdio.h>
int main(){
void res(int num[],int n);
int n;
while(scanf("%d",&n)!=EOF)
{
int num[110],i;
for(i=0;i<n;i++)
scanf("%d",&num[i]);
res(num,n);
}
return 0;
}
void res(int num[],int n)
{
int i,sum=0,max=0;
for(i=0;i<n;i++)
{
sum=sum+num[i];
if(sum>max)//连续的和有比max大的。就赋值给max
max=sum;
if(sum<0)//假设连续的数和变为了负的,那么当遇到下一个比max大的数就从这个数開始向后加
sum=0;
}
printf("%d ",max);
}