Задача 19 Урок 15
Primary tabs
Дан массив длиной N где 10 ≤ N
Найти в этом массиве отрезок длиной F, такой что на нем встречаются
все числа от 0 до k, где 0≤k
В качестве ответа (если отрезок найден) получите его начальный и конечных
индекс - m и p 1 ≤ m
Указание: Проверку массива на соответствие условиям задачи вынести в
подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.
Не могу решить следующую, двадцатую, задачу. Поэтому стоит вопрос о корректности этого решения.
type arr1 = array [1..100] of integer; var min, max, i, k, // верхняя граница поиска чисел от 0 до k f, // длина отрезка m // левая граница найденного отрезка : integer; a : arr1; function SearchNum(k : integer; var f, m : integer; a : arr1) : boolean; var j, l : integer; begin l := 1; // первый индекс поиска отрезка (ишем от L до f) m := f; while f <= high(a) do begin for i := 0 to k do // перебор искомых чисел begin result := false; for j := l to f do // поиск с первого индекса до f if i = a[j] then begin result := true; break; end; if result = false then begin f += 1; // сдвигаем зону поиска на один индекс вправо. И всё по новой l += 1; break; end; end; if result = true then begin m := f - (m - 1); // вычисление левой границы получившегося отрезка. break; end end; end; begin randomize(); min := 0; max := 30; for i := low(a) to high(a) do a[i] := min + random(max - min + 1); writeln('До какого числа искать? '); readln(k); writeln('Длина отрезка'); readln(f); if SearchNum(k, f, m, a) then begin writeln('Есть отрезок'); writeln('Границы отрезка: ', m, ' - ', f); end else write('Нет такого отрезка'); writeln; for i := low(a) to high(a) do writeln(i, ') ', a[i], ' '); writeln; write('Программа завершила свою работу'); readln(); end.
- Log in to post comments
- 676 reads
piliugin
Thu, 07/13/2023 - 17:56
Permalink
.
.