Внекоторой олимпиаде участвовало 360 человек. все работы пронумеровали натуральными числами от 1 до 360, номер каждой работы записали на титульном листе. после проверки оказалось, что порядок работ в стопке (снизу вверх) имеет необычный вид: 241, 242, 243, …, 359, 360, 121, 122, 123, …, 239, 240, 1, 2, 3, …, 119, 120. внутри каждой сотни работы по возрастанию номеров, но вот сотни переставлены местами. антону (одному из студентов, на олимпиаде) поручили упорядочить работы так, чтобы они лежали (снизу вверх) в порядке возрастания номеров: 1, 2, 3, …, 360. ему совершенно не хочется перекладывать все 360 работ, поэтому он решил, что будет делать только такие действия: возьмет непрерывный кусок из нескольких работ, перевернет, и вставит как целое на то же место. например, если бы в стопке лежало 5 работ в таком порядке: 1, 4, 3, 2, 5, то взяв и перевернув три средние работы, антон получит стопку 1, 2, 3, 4, 5. за какое наименьшее количество таких операций (одна операция это переворачивание куска работ) антон сможет сложить все работы в нужном порядке?
begin
var n:=ReadInteger('Количество элементов в массиве: ');
var a:=ArrRandom(n,-50,50);
a.Println(',');
Writeln('Четные элементы: ');
var i:=1;
while i<n do begin Write(a[i],' '); Inc(i,2) end;
Writeln;
Writeln('Нечетные элементы: ');
i:=0;
while i<n-1 do begin Write(a[i],' '); Inc(i,2) end;
Writeln
end.
Тестовое решение:
Количество элементов в массиве: 10
15,-18,-29,-25,46,21,-8,-17,-9,15
Четные элементы:
-18 -25 21 -17 15
Нечетные элементы:
15 -29 46 -8 -9
var x: array[1..nx, 1..nx] of integer;z:array[1..nx*2] of integer;
i, j, k,n,r,t: integer;
begin
Writeln('Введите размер матрицы n');Read(n);
for i := 1 to n do begin
for j := 1 to n do begin
Read(k);x[i, j] := k; end;end;
Writeln('Исходный массив');
for i := 1 to n do begin
for j := 1 to n do begin
Write(x[i, j]:4);
if x[i, j]>0 then begin t:=t+1; z[t]:=x[i, j];end;
end;
Writeln; end;
Writeln;Writeln('Одномерный массив');
for j := 1 to t do
Write(z[j]:4);
end.