Урок 15 Задача 20

Урок 15 Задача 20

Дан массив длиной N (не более 100 элементов), состоящий из случайно выбранных чисел из диапазона от 0 до k, где 0≤k Найдите в этом массиве длину самого короткого фрагмента, который содержит все числа от от 0 до k.

type Arr=array [1..100] of integer;
var i, p,m, k,l,N, min, max:integer;
    a: Arr;

function proverka(b: Arr; j,s,f: integer; var nach:integer):boolean;
var k,h:integer;
begin
  result:=true;
  for k:= 0 to f do
  begin
    for h:= j to (j+s-1) do
      if b[h]=k then
      begin
        if h=(j+s-1)then
          nach:=j;
        break;
      end;
    if b[h]<>k then
    begin
      result:=false;
      break;
    end;
  end;
end;

begin
  N:=20;
  randomize();
  min:=0;
  max:=4;
  for i:=low(a) to N do
  begin
    a[i]:= min+random(max-min+1);
    write(a[i],' ');
  end;
  writeln();
  k:=4;
  l:=k+1;
  i:=1;
  if not proverka(a,i,n,k,m) then
    write('ne vse chisla vstrechayutsa');

  While i<= (n-l) do
  begin
    if proverka(a,i,l,k,m) then
    begin
      p:=m+l;
      writeln('dlina=',l);
      write ('m=',m,' ','p=',p);
      break;
    end
      else if i=(n-l) then
      begin
        i:=0;
        l+=1;
      end;
    i+=1;
  end;
  readln();
end.