Задача 16 Урок 15
Primary tabs
Дан массив длиной N (не более 100 элементов), состоящий из случайно выбранных чисел из диапазона от 0 до k, где
Найдите в этом массиве длину самого короткого фрагмента, который содержит все числа от от 0 до k.Например:
- Для N = 6, k=2:
- Для N = 10, k=2:
- Для N = 15, k=3:
- Для N = 7, k=2:
Для быстрой проверки кода через запуск используйте следующий тип массива:
type ArrOfInt = array[1..100] of integer;
type ArrOfInt = array[1..100] of integer; var i, n, k, c, x, y, l, h: integer; z: boolean; a: ArrOfInt; begin randomize(); write('Введите длину массива не более 100: '); readln(n); k := random(n); for i := 1 to n do a[i] := random(k + 1); write('Массив: '); for i := 1 to n do write(a[i], ' '); writeln(); writeln('k=', k); x := 1; c := k; y := k + 1; l := k + 1; while true do begin repeat z := false; for i := x to y do if a[i] = c then z := true; if z then c -= 1 else begin x += 1; y += 1; c := k; end; until (c = -1) or (y = n + 1); if c = -1 then break else l += 1; h += 1; y := k + 1 + h; if y = n + 1 then break; x := 1; end; writeln(); if c = -1 then writeln('Минимальная длина фрагмента равна: ', l) else writeln('Не найдены все числа в диапазоне 0 <= k'); readln(); end.
- Log in to post comments
- 3718 reads
vedro-compota
Sun, 08/22/2021 - 14:00
Permalink
разбить на подпрограммы - в
разбить на подпрограммы - в частности хотя бы выделить функцию проверки наличия всех чисел на указанном диапазоне
_____________
матфак вгу и остальная классика =)
NewDeveloper
Sun, 08/22/2021 - 17:24
Permalink
Выделил подпрограмму
Здесь нельзя выделить функцию проверки наличия всех чисел в указанном диапазоне, можно отделить только функцию поиска фрагмента длиной x...y со всеми числами на всем массиве.
vedro-compota
Sun, 08/22/2021 - 21:35
Permalink
function chek_length_xy(a1:
тут подозрительно много переменных на вход
Достаточно передать массив, две границы, ну и там число k, при этом ни одно из этих значений не надо передавать по ссылке
-- т.е. это 4 переменных на вход и все они по значению, а не по ссылке
_____________
матфак вгу и остальная классика =)
NewDeveloper
Mon, 08/23/2021 - 03:43
Permalink
Исправлено
Длина массива всегда 100, поэтому функция принимает параметр n, в динамическом можно без n.
vedro-compota
Tue, 08/24/2021 - 21:14
Permalink
1)
1)
-- уйти от такого условия, должно быть явное условие выхода
2) добавить решение с использованием функции, которая принимает на вход: сам массив, левую границу отрезка, правую границу отрезка, число k (значения от 0 до k мы ищем) + используемый выше ограничитель длины массива
3) можно ли в решении выше обойтись без z:
_____________
матфак вгу и остальная классика =)
NewDeveloper
Wed, 08/25/2021 - 19:55
Permalink
Исправлена функция
Исправлены первый и второй пункт:
vedro-compota
Sun, 08/29/2021 - 12:31
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)