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

Задача 16 урок 15

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

Для N = 6, k=2:
20221длина=41
Для N = 10, k=2:
2022110012длина=3
Для N = 15, k=3:
20223300230321длина=40
Для N = 7, k=2:
010002длина=50

program U15Z16;
type mas=array[1..100] of integer;
var a:mas;
    n,k,i,j,kol,u,d,df:integer;
begin
  writeln('vvedite N');
  readln(n);
  writeln('vvedite k');
  readln(k);
  d:=1;
  df:=n+1;
  kol:=0;
  randomize();
  for i:=1 to n do
  begin
      a[i]:=random(k+1);
      write(a[i],' ');
  end;
  writeln();
  for i:=1 to n-k do
  begin
      for j:=0 to k do
      begin
          for u:=i to n do
          begin
              if (a[u]=j) then
              begin
                  if (d<(u-i+1)) then
                      d:= u-i+1;
                  kol:=kol+1;
                  break;
              end;
          end;
      end;
      if (kol=(k+1)) then
      begin
          if (d=(k+1)) then
          begin
              df:=d;
              break;
          end
          else
              if d<df then
                  df:=d;
      end;
      if (df=k+1) then
        break;
      d:=1;
      kol:=0;
  end;
  if (df=(n+1)) then
      writeln('massiv ne soderzhit vse chisla ot 0 do ',k)
  else
      writeln('min dlinna = ', df);
  readln();
end.