Урок 15 (Решенная задача 13)

Урок 15 (Решенная задача 13)

Дан массив длиной N, состоящий из случайно выбранных чисел из диапазона от 0 до k, где 0≤k Найдите в этом массиве длину самого короткого фрагмента, который содержит все числа от от 0 до k.

var a: array[1..1000] of integer;
  N, k, i, c : integer;

begin
 N := 15;
 k := 4;
 randomize();
 for i := 1 to N do
 begin
   a[i] := random(k + 1);
   write(a[i], ' ');
   if (a[i] <> a[i - 1]) and (c <= k) then
   c := c + 1;
 end;
 writeln('minimalnay dlina ravna ', c);
end.
vedro-compota's picture

едва ли это правильно, распечатка консоли для разных входов в студию

_____________
матфак вгу и остальная классика =)

Romakip's picture

Для N := 15;
k := 4;
Распечатка: 0 3 3 4 4 4 3 4 3 0 1 3 4 2 1 minimalnay dlina ravna 5
Для N := 20;
k := 3;
Распечатка: 0 3 2 2 0 2 0 1 1 3 0 1 3 0 2 1 1 3 3 1 minimalnay dlina ravna 4
Для N := 30;
k := 4;
Распечатка: 3 4 2 4 3 1 2 0 1 4 3 4 0 2 3 4 4 4 2 0 3 1 4 1 0 0 4 1 4 2 minimalnay dlina ravna 5

file.pas(12,31) Warning: Variable "c" does not seem to be initialized

 
 k := 4;

   if (a[i] <> a[i - 1]) and (c <= k) then
   c := c + 1;

В этих условиях значение с будет всегда не больше, чем (k+1).
Поэтому для N=10, k=4 и массива
[2,1,1,1,1,1,0,1,3,4] мы бы никогда не получили результат 10,
так как $10\gt4+1$

Для N=8, k=4 был такой вывод:

0 3 4 4 1 1 2 3 minimalnay dlina ravna 5