Задача 19. Урок 15
Primary tabs
Дан массив длиной N
, считая что массив индексируется с единицы)
(где 10≤N ). Найти в этом массиве отрезок длиной F, такой что на нем встречаются все числа от 0 до k, где 0≤k(если отрезок такой длины F, содержащий все указанные числа, существует, в противном случае сообщите, что его не существует).
В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m
и p
( 1≤mУказание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.
type newArr = array[1..25] of integer;
var m: newArr;
i, k, ind1, ind2: integer;
function checkArray(k: integer; var ind1, ind2: integer; m: newArr): boolean;
var j, f, s, n: integer;
l: boolean;
begin
n := 0;
l := false;
for j := low(m) to high(m) do
if m[j] = 0 then
begin
ind1 := j;
s := j + 1;
//writeln(j);
for f := 1 to k do
begin
if m[s] = f then
s := s + 1
else
break;
if (s - ind1 - 1) = k then
//writeln(ind1, s);
l := true;
end;
if l then
break;
end;
ind2 := s - 1;
result := l;
end;
begin
randomize();
ind1 := 0;
ind2 := 0;
writeln('vvedite 0 <= k < 10:');
readln(k);
for i := low(m) to high(m)- 1 do
m[i] := random(k + 1);
for i := low(m) to high(m) do
write(m[i], ' ');
writeln();
if checkArray(k, ind1, ind2, m) then
writeln('meeting between indexs:', ind1,' and ', ind2)
else
writeln('not all');
readln();
end.
Вывод консоли:
vvedite 0 <= k < 10: 2 2 0 2 0 1 2 1 1 0 1 0 1 2 0 0 2 1 2 1 0 1 1 1 1 0 meeting between indexs:4 and 6
- Log in to post comments
- 238 reads