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:
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.