Кинотеатр - Продажа k билетов на соседние места в одном ряду - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

В кинотеатре n рядов по m мест в каждом. В двумерном массиве хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продано, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос. Входные данные Программа получает на вход числа n и m. Далее идет n строк, содержащих m чисел (0 или 1), разделенных пробелами. Затем дано число k. Выходные данные Программа должна вывести номер ряда, в котором есть k подряд идущих свободных мест. Если таких рядов несколько, то выведите номер наименьшего подходящего ряда. Если подходящего ряда нет, выведите число 0. Примеры входные данные 3 4 0 1 0 1 1 0 0 1 1 1 1 1 2 выходные данные 2

Решение задачи: «Кинотеатр - Продажа k билетов на соседние места в одном ряду»

textual
Листинг программы
const Size = 10;
var
  Zal : array [1..Size, 1..Size] of Byte;
  n, m, Row, Col : Byte;
  k, maxLen, freeLen : Byte;
begin
  ReadLn(n, m);
  for Row := 1 to n do
    begin
      for Col := 1 to m do Read(Zal[Row, Col]);
      ReadLn;
    end;
  ReadLn(k);
  
  Row := 0;
  repeat
    Inc(Row);
    maxLen := 0; freeLen := 0;
    for Col := 1 to m do
      if Zal[Row, Col] = 0 then
        Inc(freeLen)
      else
        begin
          if freeLen > maxLen then maxLen := freeLen;
          freeLen := 0;
        end;
    if freeLen > maxLen then maxLen := freeLen;
  until (Row = n) or (maxLen >= k);
  
  if maxLen < k then WriteLn(0) else WriteLn(Row);
end.

Объяснение кода листинга программы

В данном коде объявлены следующие переменные:

  • Size - размер массива Zal, равен 10.
  • Zal - массив, в котором хранятся данные о билетах. Он имеет размерность Size x Size, то есть 10 строк по 10 столбцов. Переменная представляет собой массив байтов.
  • n, m - количество купленных билетов в строке и столбце соответственно.
  • Row, Col - текущая строка и столбец, в которых находится покупатель.
  • k - количество свободных мест в зале.
  • maxLen, freeLen - максимальное количество билетов, которое может быть продано, и текущее количество свободных билетов. В начале кода считываются данные о количестве купленных билетов в каждой строке и столбце. Затем считывается количество свободных билетов. Далее идет цикл, в котором увеличивается значение Row, если все билеты в текущей строке проданы. Если Row равно размеру n, то цикл прекращается. Также проверяется, не превышает ли количество свободных билетов максимальное количество билетов, которое может быть продано. Если это так, то обновляется максимальное количество билетов. Если в конце цикла количество свободных билетов меньше максимального, то выводится номер строки. В противном случае выводится ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы