среда, 24 июня 2009 г.

задача 13

В последовательности А из N элементов каждую группу из рядом стоящих нулей заменить одним нулем . Среди отрезков последовательности , заключенных между парами оставшихся нулей , найти два: с минимальным и максимальным числом элементов. Если оба искомых отрезка существуют, то преобразовать массив так, чтобы между нулями, ограничивающими первый отрезок, оказались элементы второго отрезка , а между нулями, ограничивающими второй отрезок - элементы первого, сохранив порядок следования .
В противном случае в массиве А изменить порядок следования элементов на обратный. Преобразованный массив А выдать на дисплей в строку.


последовательность A из N элементов это

const
N = 50;

var
A: array [1..N] of integer;


отмечу лишь некоторые ключевые моменты, как-то замена рядомстоящих нулей на один

   m:=1; {новый размер массива}
f:=false; {признак повторяющихся нулей}
for i:=1 to N do begin
if A[i] = 0 then begin {если это ноль}
if f then begin {и до этого был ноль}
{ничего не делаем - идём дальше}
end else begin {до этого был НЕ ноль}
f:=true; {выставляем признак начала нулей}
A[m]:=A[i]; {один из них оставляем}
m:=m+1;
end;
end else begin {это НЕ ноль}
f:=false; {сбрасываем признак нуля}
A[m]:=A[i]; {заполняем массив}
m:=m+1;
end;
end;


переворот значений в массиве (эта часть программы почти никогда не будет выполняться, но алгоритм интересный)
      for i:=1 to m do begin
temp:=A[1];
for j:=1 to m-i do begin
A[j]:=A[j+1];
end;
A[m-i+1]:=temp;
end;


полный вариант программы тут

Комментариев нет:

Отправить комментарий