Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел - Free Pascal
Формулировка задачи:
Задан массив X[1..m]. Найти длину К самой длинной "пилообразной"(зубьями вверх) последовательности идущих подряд чисел: X[p+1]<X[p+2]>X[p+3]<....>X[p+K].
Решение задачи: «Найти в массиве длину К самой длинной "пилообразной" (зубьями вверх) последовательности идущих подряд чисел»
textual
Листинг программы
uses crt; const nmax=20; var a:array[1..nmax] of integer; m,p,j,k,mx,pmx,max:byte; begin clrscr; repeat write('Размер массива до ',nmax,' m='); readln(m); until m in [1..nmax]; writeln('Введите элементы массива, в том числе пилообразные участки:'); for p:=1 to m do begin write('a[',p,']='); readln(a[p]); end; clrscr; writeln('Массив:'); for p:=1 to m do write(a[p],' '); writeln; writeln; p:=2;mx:=0;pmx:=0;max:=0; while p<m do if (a[p]>a[p-1])and(a[p]>a[p+1]) then begin j:=p;k:=0; while (a[j]>a[j-1])and(a[j]>a[j+1])and(j<m) do begin k:=k+1; j:=j+2; end; if k>mx then begin max:=2*k+1; pmx:=p-1; end; p:=p+2*k+1; end else p:=p+1; if max=0 then write('Нет пилообразных участков!') else begin writeln('Максимальная пилообразная последовательность=',max); for p:=pmx to pmx+max-1 do write(a[p],' '); end; readln end.
Объяснение кода листинга программы
- Вводится размер массива
nmax
и сохраняется в константеnmax
. - Создается массив
a
типаarray[1..nmax] of integer
для хранения чисел. - Создаются следующие переменные:
m
для хранения размера массива;p
для счётчика элементов массива;j
иk
для работы с пилообразными участками;mx
для хранения максимальной длины пилообразного участка;pmx
для хранения индекса начала пилообразного участка;max
для хранения максимального размера пилообразного участка.
- Пользователю предлагается ввести элементы массива.
- После ввода всех элементов, программа ищет пилообразные участки, сравнивая три элемента в ряд.
- Если текущий элемент больше предыдущего и следующего, начинается новый пилообразный участок.
- Длина текущего пилообразного участка сохраняется в переменной
k
. - Если текущий пилообразный участок длиннее предыдущего, текущий пилообразный участок заменяет предыдущий, а его длина сохраняется в переменной
mx
. - Индекс начала текущего пилообразного участка сохраняется в переменной
pmx
. - После окончания ввода, программа выводит массив.
- Если максимальный пилообразный участок не найден, выводится сообщение
Нет пилообразных участков!
. - В противном случае выводится сообщение
Максимальная пилообразная последовательность=
, за которым следуют элементы пилообразного участка, а затем запрашивается ввод.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д