Задача 19. Урок 15
Primary tabs
Дан массив длиной N
, считая что массив индексируется с единицы)
(где 10≤N ). Найти в этом массиве отрезок длиной F, такой что на нем встречаются все числа от 0 до k, где 0≤k(если отрезок такой длины F, содержащий все указанные числа, существует, в противном случае сообщите, что его не существует).
В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m
и p
( 1≤mУказание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.
type newArr = array[1..25] of integer; var m: newArr; i, k, ind1, ind2: integer; function checkArray(k: integer; var ind1, ind2: integer; m: newArr): boolean; var j, f, s, n: integer; l: boolean; begin n := 0; l := false; for j := low(m) to high(m) do if m[j] = 0 then begin ind1 := j; s := j + 1; //writeln(j); for f := 1 to k do begin if m[s] = f then s := s + 1 else break; if (s - ind1 - 1) = k then //writeln(ind1, s); l := true; end; if l then break; end; ind2 := s - 1; result := l; end; begin randomize(); ind1 := 0; ind2 := 0; writeln('vvedite 0 <= k < 10:'); readln(k); for i := low(m) to high(m)- 1 do m[i] := random(k + 1); for i := low(m) to high(m) do write(m[i], ' '); writeln(); if checkArray(k, ind1, ind2, m) then writeln('meeting between indexs:', ind1,' and ', ind2) else writeln('not all'); readln(); end.
Вывод консоли:
vvedite 0 <= k < 10: 2 2 0 2 0 1 2 1 1 0 1 0 1 2 0 0 2 1 2 1 0 1 1 1 1 0 meeting between indexs:4 and 6
- Log in to post comments
- 49 reads