Задача 20 Урок 15
Primary tabs
Дан массив длиной 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
Для быстрой проверки кода через запуск используйте следующий тип массива:type ArrOfInt = array[1..100] of integer;
program u15z20; type massiv = array[1..100] of integer; var m: massiv; k,i,x,f,p,t,q: integer; function f1 (m: massiv; a,b,c: integer): integer; var z,j,q: integer; begin for j:=0 to a do begin q:=0; for z:=b to c do //проверка на отрезке begin if j=m[z] then q:=1; end; if q=0 then //если не встретили число то выходим break; end; result:=q; end; procedure p1(var t,p,q,k,f :integer; m:massiv); var i :integer; begin t := 1; p := f; for i := low(m) to (high(m) - f) do begin q := f1(m,k,t,p); if q=1 then begin writeln('m = ', t, ' ', 'p = ', p); writeln('Dlina= ',(p-t)+1); //отличие от задачи 19 break; end else begin t := t + 1; p := p + 1; end; end; end; begin writeln('Vvedite k'); readln(k); randomize(); for i:=low(m) to high(m) do begin m[i] := random(k+1); write (m[i], ' '); end; q:=0; writeln; f:=k; //отличие от задачи 19 for i:=low(m) to (high(m)-f) do //ищем короткий отрезок,если нет ищем длиннее if (q=0) and (f<=(high(m) - k)) then begin f:=f+1; p1(t,p,q,k,f,m); end else if q=0 then begin write ('No'); break; end; readln(); end.
- Log in to post comments
- 492 reads
vedro-compota
Sun, 01/08/2023 - 14:18
Permalink
проверить форматирование
-- для флагов используем логическую переменную
_____________
матфак вгу и остальная классика =)
NikSo
Fri, 01/27/2023 - 13:17
Permalink
Исправил
vedro-compota
Sun, 01/29/2023 - 13:18
Permalink
1)
1)
-- вернуть длину найденного отрезка и признак что он найден, т.е. только 2 переменные
максимум должны меняться по ссылке.
2) Переписать без рекурсивного вызова
_____________
матфак вгу и остальная классика =)