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

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

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

var a: array[1..30] of integer;
 k, i, c, s, t, z, h: integer;
 flag: boolean;
begin
 flag:=true;
 h:=1;  //индекс фрагментов /c
 z:=0;  //счетчик совпадений
 t:=0;    //сдвиг основного ряда
 randomize();
 writeln('vvedite k: 0 <= k < N');
 readln(k);
 c:=k;   //минимальная длина фрагмента
 for i:= low(a) to high(a) do
   begin
     a[i] := random(k);   //формеруем основной массив
     write(a[i],' ');
   end;
 writeln();
 while (flag) do
   begin
     writeln(h+t);
     for i:=0 to (c) do  //  перебор значений k
       begin
       for s:= (h+t) to (h+t+c-1) do  //перебор основного ряда по фрагментам
         begin                       // из 'c' элементов
           if s >= high(a) then
             break
           else if a[s] = i then
             begin
               z:=z+1;
               break;
             end;
         end;
       end;
     if (z = k) then   //если счетчик совпадений = k
       begin
         writeln('dlina fragmenta = ', c);
         flag:=false;
       end;

     z:=0; //обнуляем совпадения
     h:=h+c; //переходим к следующемуфрагменту
     if h >= high(a)then //если закончился первый прербор
       begin
         h:=1;   //обнуляем h до 1
         t:=t+1; //смещаем начало фрагмента
       end;
      if t = c then  //если сместили до макс. длины фрагмента:
       begin
         t:=0;    //обнуляем смещение
         c:=c+1;  //увеличиваем длину фрагмента
       end;
      if c >= high(a) then  //по идеи такое случиться только если
       begin                   //random() не выдаст один из всех
         writeln('net variantov'); //возможных вариантов
         break;
       end;
   end;
 readln;
end.
vedro-compota's picture

переиспользовать функцию из задачки http://fkn.ktu10.com/?q=node/13214#comme...

_____________
матфак вгу и остальная классика =)