Задача 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
- 973 reads
piliugin
Thu, 07/13/2023 - 17:56
Permalink
.
.