Задание 16 урок 15
Primary tabs
Дан массив длиной N(не более 100 элементов),
состоящий из случайно выбранных чисел из диапазона от 0 до k
где 0≤kНайдите в этом массиве длину самого короткого фрагмента,
который содержит все числа от от 0 до k.
program U15Z16; type mas=array[1..11] of integer; var a:mas = (1,0,0,1,1,3,2,0,1,2,2); n,k,i,j,kol,u,d,df:integer; begin N:= 11; K:=3; d:=1; // счетчик текущей длинны фрагмента проверки // i - левая граница текущего фрагмента // u - правая граница текущего фрагмента // k+1 - искомая минимальная длина фрагмента // u - i + 1; - текущая длина на момент // очередного совпадения (пройдено элементов) df:=n+1; // мин фрагмент:= начальное значение //если не встретятся искомые совпаденния kol:=0;//счетчик совпадений //randomize(); //for i:=1 to n do //begin // a[i]:=random(k+1); // write(a[i],' '); // // end; writeln(); writeln('i ','j ','u ','u-i+1 ','d ','kol ','df'); //(1,0,0,1,1,3,2,0,1,2,2) for i:=1 to n-k do // 1 фрагмент массива без пользовательского числа //1 блок определения минимальной длинны фрагмента с совпадениями 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; ///////////////конец 1 блока //2 блок выявление самого минимального фрагмента с совпадениями if (kol=(k+1)) then //счетчик совпадений достиг искомого значения begin //если в теле внешнеш цикла нашлись все элементы от 0 до к if (d=(k+1)) then //счетчик текущей длины достиг искомого значения begin df:=d; // минимальная длинна определена break; end else if d<df then //если текущий меньше искомого (минимального) df:=d; // искомый уменьшется до значения текущего writeln(i,' ',j,' ',u,' ',u-i+1,' ',d,' ',kol,' ',df); 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.
- Log in to post comments
- 634 reads