Pascal

Modified: Wednesday, 22-12-2021 07:00 AM

Tìm đoạn đối xứng dài nhất trong mảng.

Ví dụ:

Mảng A  có 15 phần tử số nguyên như sau:

Mảng A:
1 1 2 3 4 5 4 3 2 1 8 45 6 43 6

Đoạn con đối xứng dài nhất là:

1 2 3 4 5 4 3 2 1

var n,i,vt,dodai:integer;
a:array[1..999] of integer;
dx:boolean;
// --- Kiem tra dx
function check(x,y:integer):boolean;
var j,m:integer;
begin
    for j:=x to y do write(a[j]:3); writeln;
        writeln;
    m := 1;
    if odd(dodai) then 
        m := 0;
    // Truong hop do dai le
    if odd(dodai) then
    begin
        for j:= ((dodai div 2) + x-m) downto x  do 
        begin 
            if(a[j]<>a[y-j + x +m]) then 
                exit(false);
        end;
    end
    else // Truong hop do dai chan
    begin
        for j:= ((dodai div 2) + x-m) downto x  do 
        begin 
            if(a[j]<>a[y-j + x]) then 
                exit(false);
        end;
    end;
    
    exit(true);
end;

procedure xuat;
begin
    writeln('---------------');
    writeln('vt =',vt:3,' do dai =',dodai:3);  
    for i:=vt to vt+dodai-1 do write(a[i]:3);
end;
// --- Main
begin
    
    write('So luong phan tu: ');
    readln(n);
    for i:=1 to n do 
    begin
        write('a[',i,']= ');
        readln(a[i]);
    end;
    
    // Xu li 
    for dodai:= n downto 2 do 
    begin
        for vt:= 1 to n-dodai+1 do 
        begin
            //writeln('vt ',vt:3,' do dai: ',dodai:3);
            dx := check(vt,vt+dodai-1);  
            if dx then 
            begin
                xuat;
                break;
            end;
        end;
        if dx then break;
    end;
    readln;   
end.