不是VIP会员,不能显示答案

题目解答

题目:
(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。
var 
 a: array[1..100] of integer; 
 n, i, ans, len, tmp, beg: integer; 
begin 
 read(n); 
 for i := 1 to n do 
  read(a[i]); 
 tmp := 0; 
 ans := 0; 
 len := 0; 
 beg :=    0     ; 
 for i := 1 to n do 
 begin 
  if tmp + a[i] > ans then 
  begin 
   ans := tmp + a[i]; 
   len := i - beg; 
  end 
  else if (   tmp+a[i]=ans    ) and (i - beg > len) then 
   len := i - beg; 
  if tmp + a[i]  <0    then 
  begin 
   beg :=  i  ; 
   tmp := 0; 
  end 
  else 
    inc(tmp,a[i])  ;  
 end; 
 writeln(ans, ' ', len); 
end. 
考点:
分析:
解答:
评论:
老师: