Задача 19. Урок 15

Урок 15. Задача 19

Дан массив длиной 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