🎉 Félicitations ! 🎉
Tu as brillamment résolu la tâche ! C était difficile, mais tu as trouvé la bonne solution. Tu es encore plus proche de maîtriser la programmation ! Continue ainsi.
ProgerLib Python pour tous
Vous avez obtenu un poste d'administrateur dans un petit hôtel très populaire, le Cosmos. L'administrateur précédent tenait les registres des clients dans un carnet, et des confusions survenaient constamment : les clients étaient installés dans des chambres déjà occupées ou, à l'inverse, les chambres restaient inutilisées alors qu'elles auraient pu être attribuées. Le directeur vous a confié la tâche — d'automatiser le processus de répartition des clients dans les chambres.
Votre programme doit accepter la liste des demandes de réservation et déterminer le numéro de chambre pour chaque demande. L'objectif principal — est d'utiliser le moins de chambres possible afin de réduire les coûts de nettoyage et d'entretien. De nouvelles chambres ne doivent être ouvertes qu'en cas de nécessité. Si plusieurs chambres sont libérées, le client doit être installé dans la chambre portant le plus petit numéro.
Condition formelle :
Vous disposez d'une liste de n clients. Pour chaque client, le jour de son arrivée et le jour de son départ sont connus. Les jours sont numérotés par des entiers. Le client occupe la chambre le matin du jour d'arrivée et la libère le matin du jour de départ. Cela signifie que si un client part le jour X, un autre client peut déjà emménager dans cette chambre le même jour X.
Vous devez écrire un programme qui, pour chaque client (dans l'ordre où ils ont été saisis), déterminera le numéro de la chambre dans laquelle il sera installé. La numérotation des chambres commence à 1. L'algorithme doit être « glouton » : essayez toujours d'installer un nouveau client dans une chambre précédemment utilisée avec le plus petit numéro possible, et seulement s'il n'y a pas de chambres libres — ouvrez-en une nouvelle.
n lignes. Chaque ligne contient deux nombres séparés par un espace : day_arrival et day_departure (entiers). Ces lignes soumettent les demandes des clients et peuvent être dans un ordre aléatoire.
À la fin, il y aura une ligne "end".
Une ligne contenant n nombres séparés par un espace. i le nombre dans la ligne — C'est le numéro de la chambre attribuée i -ème client de la liste originale.
1 5
8 10
2 4
6 9
1 3
fin
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)
🎉 Félicitations ! 🎉
Tu as brillamment résolu la tâche ! C était difficile, mais tu as trouvé la bonne solution. Tu es encore plus proche de maîtriser la programmation ! Continue ainsi.
AD
Publicité
Exécution de votre code...