输入一组整数,求出这组数字子序列和中最大值。也就是仅仅要求出最大子序列的和,不必求出最大的那个序列。
比如:
序列:-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\n",max); }