Tìm dãy con gồm m phần tử (m<=n) sao cho dãy con này có tổng lớn nhất (dãy con là dãy các phần tử liên tiếp nhau trong mảng). VD: 4 5 6 2 3 1 8 9 7 nh

Tìm dãy con gồm m phần tử (m<=n) sao cho dãy con này có tổng lớn nhất (dãy con là dãy các phần tử liên tiếp nhau trong mảng). VD: 4 5 6 2 3 1 8 9 7 nhập m=4 => tính tổng 4 số liên tiếp có tổng là lớn nhất khi đó màn hình sẽ đưa ra tổng lớn nhất của các số 1; 8; 9; 7

0 bình luận về “Tìm dãy con gồm m phần tử (m<=n) sao cho dãy con này có tổng lớn nhất (dãy con là dãy các phần tử liên tiếp nhau trong mảng). VD: 4 5 6 2 3 1 8 9 7 nh”

  1. Đùng function:

    uses crt;
    var i,n,m,max:longint; a:array[1..10000]of longint;
    function s(i:longint):longint;
    var j:longint;
    begin
       s:=0;
       for j:=i to i+m-1 do 
          s:=s+a[j];   
    end;
    begin
    clrscr;
       write(‘Nhap n,m: ‘);readln(n,m);
       for i:=1 to n do 
          begin 
             write(‘Nhap phan tu thu ‘,i,’: ‘);readln(a[i]); 
          end;
       for i:=1 to n-m+1 do 
          If s(i)>max then max:=s(i);
       writeln(max);
    readln
    end.   

    Không dùng function:

    uses crt;
    var i,j,s,n,m,max:longint; a:array[1..10000]of longint;
    begin
    clrscr;
       write(‘Nhap n,m: ‘);readln(n,m);
       for i:=1 to n do 
          begin 
             write(‘Nhap phan tu thu ‘,i,’: ‘);readln(a[i]); 
          end;
       for i:=1 to n-m+1 do 
          begin
             s:=0;
             for j:=i to i+m-1 do 
                s:=s+a[j];
             If s>max then max:=s;
          end;
       writeln(max);
    readln
    end.   

    Bình luận
  2. uses crt;
    var a:array[1..1000] of longint;
        i,j,n,m,vt:word;
        t,max:longint;
    begin
        clrscr;
        readln(n);
        for i:=1 to n do read(a[i]);
        readln;
        readln(m);
        for i:=1 to n-m+1 do
           begin
               for j:=i to i+m-1 do
                  t:=t+a[j];
               if max<t then
                  begin
                      max:=t;
                      vt:=i;
                  end;
           end;
        for j:=i to i+m-2 do write(a[j],’;’);
        write(a[i+m-1]);
    readln;
    end.

    Bình luận

Viết một bình luận