Урок 15, Задача 20
Primary tabs
Дан массив длиной N (не более 100 элементов),
состоящий из случайно выбранных чисел из диапазона от 0 до k, где 0≤kНайдите в этом массиве длину самого короткого фрагмента,
который содержит все числа от от 0 до k.
type arr1 = array [1..20] of integer; var mincount, min, max, i, q // верхняя граница поиска чисел от 0 до q : integer; a : arr1; function Shortest(q : integer; a : arr1; var mincount : integer) : boolean; var n, k, j, l, count : integer; vse: boolean; begin result := false; l := 1; while l < high(a) - q do begin count := 0; n := 100; k := 0; for i := 0 to q do begin vse := false; for j := l to high(a) do if a[j] = i then begin vse := true; if n > j then n := j; if k < j then k := j; break; end; if vse = false then break; end; if vse then begin count := (k - n) + 1; if mincount > count then mincount := count; l := n + 1; result := vse; end else break; end; end; begin writeln('Сколько искать?'); readln(q); min := 0; max := q; for i := low(a) to high(a) do a[i] := min + random(max - min + 1); mincount := high(a); if Shortest(q, a, mincount) then writeln('Минимальный отрезок: ', mincount) else writeln('В массиве представлены не все числа'); for i := low(a) to high(a) do write(a[i], ' '); write('Программа завершила свою работу'); readln(); end.
- Log in to post comments
- 762 reads
vedro-compota
Mon, 07/17/2023 - 20:05
Permalink
Концептуально простое решение
Концептуально простое решение:
1) создать функцию, которая проверяет заданный отрезок (по индексам) на наличия набор чисел (две координаты границы отрезка и значение k)
2) Написать алгоритм нарезки/перебора вариантов отрезков - начиная с минимально возможного
-- реализовать такой подход
_____________
матфак вгу и остальная классика =)