首页 > 试题广场 >

(最大连续子段和)给出一个数列(元素个数不多于100),数列

[填空题]
(最大连续子段和)给出一个数列(元素个数不多于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 :=    1     ;
  for i := 1 to n do
  begin
    if tmp + a[i] > ans then
    begin
      ans := tmp + a[i];
      len := i - beg;
    end
    else if (        2        ) and (i - beg > len) then
      len := i - beg;
    if tmp + a[i]     3      then
    begin
      beg :=     4     ;
      tmp := 0;
    end
    else
           5        ; 
  end;
  writeln(ans, ' ', len);
end.

这道题你会答吗?花几分钟告诉大家答案吧!