Задача 19 Урок 15
Primary tabs
Дан массив длиной N (где 10≤N В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m и p ( 1≤m
type
//myArr = array [1..10] of integer;
myArr = array [1..100] of integer;
var
min, max, i,
k: integer; // верхняя граница поиска чисел от 0 до k
f: integer; // длина отрезка
m: integer; // левая граница найденного отрезка
a : myArr;
function SearchNum(k : integer; var f, m : integer; a : myArr) : boolean;
var
j, l : integer;
begin
l := 1; // первый индекс поиска отрезка (ишем от L до f)
m := f;
while f <= high(a) do
begin
for i := 0 to k do // перебор искомых чисел
begin
result := false;
for j := l to f do // поиск с первого индекса до f
if i = a[j] then
begin
result := true;
break;
end;
if result = false then
begin
f += 1; // сдвигаем зону поиска на один индекс вправо. И всё по новой
l += 1;
break;
end;
end;
if result = true then
begin
m := f - (m - 1); // вычисление левой границы получившегося отрезка.
break;
end
end;
end;
begin
//a[1]:=0;
//a[2]:=1;
//a[3]:=4;
//a[4]:=6;
//a[5]:=3;
//a[6]:=0;
//a[7]:=1;
//a[8]:=2;
//a[9]:=3;
//a[10]:=4;
randomize();
min := 0;
max := 10;
for i := low(a) to high(a) do
a[i] := min + random(max - min + 1);
writeln('enter K');
readln(k);
writeln('enter the segment F ');
readln(f);
if SearchNum(k, f, m, a) then
begin
writeln('the segment occurs');
writeln('segment: ', m, ' - ', f);
for i := m to f do
write(a[i], ' ');
end
else
write('the segment does not occur');
writeln;
writeln('Original');
for i := low(a) to high(a) do
write(a[i], ' ');
writeln;
write('End');
readln();
end.
Вывод консоли:
enter K 3 enter the segment F 10 the segment occurs segment: 59 - 68 9 6 0 9 10 2 1 5 0 3 Original 4 5 9 7 10 0 10 0 7 6 1 4 9 3 10 0 9 3 6 6 0 10 9 5 0 7 4 4 2 10 6 10 4 5 0 6 7 8 9 4 6 2 1 8 10 8 1 6 1 5 7 5 3 7 4 6 2 2 9 6 0 9 10 2 1 5 0 3 7 7 7 10 0 1 5 6 2 4 4 0 0 1 3 8 10 5 7 4 6 1 4 0 6 4 5 3 1 7 1 5 End
- Log in to post comments
- 464 reads