Задание 16 урок 15
Primary tabs
Дан массив длиной N (не более 100 элементов), состоящий из случайно выбранных чисел из диапазона от 0 до k, где 0≤k
Найдите в этом массиве длину самого короткого фрагмента, который содержит все числа от от 0 до k.
program U15z_16;
const N = 40;
type
MyArr = array[1..N] of integer;
function findCh(a: MyArr; c,l, r: integer): boolean;
var i, j: integer;
begin
for i := 0 to c do
begin
result := false;
for j := l to r do
if i = a[j] then
begin
result := true;
break;
end;
if not result then
break;
end;
end;
//основная программа
var a: MyArr;
j,i, k, Left, Right, D: integer;
min,max: integer;
begin
writeln('chislo ot usera ot 2 do 4:');
readln(k);
D := 0; //начальное значение длины отрезка
min := 0;
max:= k;
randomize();
writeln('Massiv: ');
for j := low(a) to high(a) do
a[j] := min + random(max - min + 1);
for j := 1 to N do
write(a[j],' ');
for i := k+1 to N do //счетчик длинны искомого отрезка
begin
for Left := 1 to N - i do //левый край отрезка ;
begin
Right := Left + i-1; // правый край отрезка
if findCh(a, k,Left, Right) then
begin
// если отрезок содержит все эл-ты
writeln('samaya korotkay dlina ot 0 do k = ',i);
D := i; //все числа нашлись в первом отрезке
break;
end;
end;
if D > 0 then //если все числа нашлись в первом отрезке
break;
end;
if not findCh(a, k,Left, Right) then
writeln('ne vse chisla ot 0 do k');
readln
end. - Log in to post comments
- 931 reads