В кинотеатре есть несколько рядов и каждый ряд имеет некоторое количество мест. В двумерном массиве хранится информация

  • 56
В кинотеатре есть несколько рядов и каждый ряд имеет некоторое количество мест. В двумерном массиве хранится информация о проданных билетах, где 1 означает проданный билет, а 0 - свободное место. Нужно определить, можно ли продать k билетов на соседние места в одном ряду. Программа получает на вход числа n и m, где n - количество рядов (n≤30) и m - количество мест в каждом ряду (m≤30). Затем следует n строк, содержащих m чисел (0 или 1), разделенных пробелами - информация о проданных билетах. Последним вводом является число k. Программа должна вывести номер ряда, в котором есть k свободных мест подряд. Если таких рядов несколько, вывести номер любого из них.
Тигрёнок
62
Чтобы решить эту задачу, мы будем использовать двумерный массив, где каждый элемент будет представлять собой информацию о проданных билетах для каждого места в кинотеатре.

Сначала давайте получим входные данные: количество рядов \(n\), количество мест в каждом ряду \(m\), а затем строки, содержащие информацию о проданных билетах.

Для начала, создадим пустой двумерный массив размером \(n \times m\) и заполним его значениями, полученными из ввода:

python
n, m = map(int, input().split())
cinema = []
for _ in range(n):
row = list(map(int, input().split()))
cinema.append(row)


Теперь у нас есть двумерный массив `cinema`, содержащий информацию о проданных билетах.

Затем нам нужно проверить каждый ряд на наличие k соседних свободных мест. Мы можем сделать это, перебирая каждый ряд и проверяя каждую группу соседних мест размером k:

python
k = int(input())
row_number = 0
found_row = False

for i in range(n):
row = cinema[i]
consecutive_free_seats = 0
for j in range(m):
if row[j] == 0:
consecutive_free_seats += 1
if consecutive_free_seats == k:
row_number = i + 1
found_row = True
break
else:
consecutive_free_seats = 0
if found_row:
break


После выполнения этого цикла у нас будет переменная `found_row`, которая будет равна `True`, если мы найдем ряд с k свободными соседними местами.

Если переменная `found_row` равна `True`, мы можем вывести номер найденного ряда:

python
if found_row:
print(f"Ряд номер {row_number} имеет {k} соседних свободных мест.")
else:
print("Нет ряда с к соседними свободными местами.")


Теперь у нас есть полное решение, которое позволяет определить, можно ли продать k билетов на соседние места в одном ряду. Здесь представлен полный код:

python
n, m = map(int, input().split())
cinema = []
for _ in range(n):
row = list(map(int, input().split()))
cinema.append(row)

k = int(input())
row_number = 0
found_row = False

for i in range(n):
row = cinema[i]
consecutive_free_seats = 0
for j in range(m):
if row[j] == 0:
consecutive_free_seats += 1
if consecutive_free_seats == k:
row_number = i + 1
found_row = True
break
else:
consecutive_free_seats = 0
if found_row:
break

if found_row:
print(f"Ряд номер {row_number} имеет {k} соседних свободных мест.")
else:
print("Нет ряда с к соседними свободными местами.")


Это полное решение задачи. Оно позволяет определить, есть ли в кинотеатре ряд с k свободными соседними местами.