🎉 Parabéns! 🎉
Você resolveu a tarefa brilhantemente! Foi difícil, mas você encontrou a solução certa. Você está um passo mais perto de dominar a programação! Continue assim.
ProgerLib Python para todos
Você conseguiu um emprego como administrador em um pequeno, mas muito popular hotel Cosmos. O administrador anterior mantinha registros dos hóspedes em um caderno, e constantemente surgia confusão: os hóspedes eram alojados em quartos já ocupados ou, inversamente, os quartos ficavam ociosos, embora fosse possível alugá-los. O diretor lhe deu a tarefa — Automatizar o processo de distribuição dos hóspedes pelos quartos.
Seu programa deve aceitar a lista de pedidos de reserva e determinar o número do quarto para cada pedido. O objetivo principal — Usar o menor número possível de quartos para reduzir os custos de limpeza e manutenção. Novos quartos devem ser abertos apenas em caso de necessidade. Se vários quartos forem liberados, o hóspede deve ser alojado no quarto com o menor número.
Condição formal:
Você tem uma lista de n clientes. Para cada cliente, o dia de sua chegada e o dia de sua partida são conhecidos. Os dias são numerados por números inteiros. O hóspede ocupa o quarto na manhã do dia de chegada e o libera na manhã do dia de partida. Isso significa que, se um hóspede sai no dia X, outro hóspede já pode ocupar este quarto no mesmo dia X.
Você precisa escrever um programa que, para cada cliente (na ordem em que foram inseridos), determine o número do quarto no qual ele será alojado. A numeração dos quartos começa em 1. O algoritmo deve ser "guloso": sempre tente alojar um novo hóspede em um quarto usado anteriormente com o menor número possível, e somente se não houver quartos livres — Abra um novo.
n linhas. Cada linha contém dois números separados por um espaço: day_arrival e day_departure (inteiros). Essas linhas representam solicitações de clientes e podem estar em ordem aleatória.
No final, haverá uma linha "end".
Uma linha contendo n números separados por um espaço. i -ésimo número na linha — Este é o número do quarto alocado para o i -ésimo cliente da lista original.
1 5
8 10
2 4
6 9
1 3
fim
1 2 2 1 3
# Создаем пустой список для хранения заявок от клиентов
requests = []
# Используем цикл while для считывания всех заявок до слова "конец"
while True:
# Считываем очередную строку ввода
line = input()
# Если введена строка "конец", выходим из цикла
if line == "конец":
break
# Разделяем строку по пробелу и преобразуем части в целые числа
arrival_day, departure_day = map(int, line.split())
# Добавляем кортеж с днями прибытия и отъезда в список заявок
requests.append((arrival_day, departure_day))
# Список для хранения дат отъезда для каждой занятой комнаты.
# Индекс списка - это (номер_комнаты - 1).
# Значение - день, когда комната освободится.
room_departure_dates = []
# Список для хранения результатов - номеров комнат для каждого клиента
assigned_rooms = []
# Инициализируем счетчик для цикла while, чтобы пройти по всем заявкам
request_index = 0
# Основной цикл, который обрабатывает каждую заявку последовательно
while request_index < len(requests):
# Получаем данные текущего клиента
current_arrival, current_departure = requests[request_index]
# Флаг, который покажет, нашли ли мы комнату для клиента
has_found_room = False
# Инициализируем счетчик для поиска свободной комнаты
room_index = 0
# Вложенный цикл while для поиска подходящей комнаты среди уже существующих
while room_index < len(room_departure_dates):
# Комната считается свободной, если новый гость прибывает
# в тот же день или позже, чем уезжает предыдущий гость.
if current_arrival >= room_departure_dates[room_index]:
# Мы нашли подходящую комнату! Обновляем для нее дату отъезда.
room_departure_dates[room_index] = current_departure
# Добавляем номер комнаты (индекс + 1) в список результатов
assigned_rooms.append(room_index + 1)
# Устанавливаем флаг, что комната найдена
has_found_room = True
# Прерываем поиск, так как мы должны выбрать комнату с наименьшим номером
break
# Переходим к проверке следующей комнаты
room_index += 1
# Если после проверки всех комнат свободная так и не нашлась
if not has_found_room:
# "Открываем" новую комнату, добавляя дату отъезда нового гостя в конец списка
room_departure_dates.append(current_departure)
# Номер новой комнаты будет равен текущему количеству комнат
new_room_number = len(room_departure_dates)
# Добавляем номер новой комнаты в список результатов
assigned_rooms.append(new_room_number)
# Переходим к обработке следующей заявки
request_index += 1
# Выводим все назначенные номера комнат в одну строку через пробел
print(*assigned_rooms)
🎉 Parabéns! 🎉
Você resolveu a tarefa brilhantemente! Foi difícil, mas você encontrou a solução certa. Você está um passo mais perto de dominar a programação! Continue assim.
AD
Publicidade
Executando seu código...