• 1
    डेटा I/O
    • कार्य
  • 2
    शर्तें
    • कार्य
  • 3
    for लूप
    • कार्य
  • 4
    स्ट्रिंग
    • कार्य
  • 5
    while लूप
    • कार्य
  • 6
    सूचियां
    • कार्य
  • 7
    2D मैट्रिक्स
    • कार्य
  • 8
    डिक्शनरी
    • कार्य
  • 9
    सेट
    • कार्य
  • 10
    फ़ंक्शन
    • कार्य
  • к

पाठ 5. While cycle

कठिनाई:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

कार्य«होटल में कमरे का वितरण»

💻 Python

आपको एक छोटे लेकिन बहुत लोकप्रिय कॉसमॉस होटल में प्रशासक के रूप में नौकरी मिल गई है। पिछला प्रशासक एक नोटबुक में मेहमानों का रिकॉर्ड रखता था, और लगातार भ्रम की स्थिति बनी रहती थी: मेहमानों को पहले से भरे हुए कमरों में ठहरा दिया जाता था या, इसके विपरीत, कमरे खाली पड़े रहते थे, जबकि उन्हें किराए पर दिया जा सकता था। निदेशक ने आपको कार्य सौंपा है & mdash; मेहमानों को कमरों में वितरित करने की प्रक्रिया को स्वचालित करना।


आपके प्रोग्राम को आरक्षण के लिए आवेदनों की सूची स्वीकार करनी होगी और प्रत्येक आवेदन के लिए कमरे का नंबर निर्धारित करना होगा। मुख्य लक्ष्य & mdash; सफाई और रखरखाव की लागत कम करने के लिए जितना संभव हो उतने कम कमरों का उपयोग करना। नए कमरे केवल आपात स्थिति में ही खोले जाने चाहिए। यदि कई कमरे खाली हो जाते हैं, तो अतिथि को सबसे छोटे नंबर वाले कमरे में ठहराया जाना चाहिए।


औपचारिक शर्त:
आपके पास & nbsp; n & nbsp; ग्राहकों की एक सूची है। प्रत्येक ग्राहक के लिए, उसके आगमन का दिन और प्रस्थान का दिन ज्ञात है। दिनों को पूर्णांकों द्वारा क्रमांकित किया जाता है। अतिथि आगमन के दिन सुबह कमरे पर कब्जा करता है और प्रस्थान के दिन सुबह उसे खाली करता है। इसका मतलब है कि यदि कोई अतिथि दिन X को छोड़ता है, तो दूसरा अतिथि उसी दिन X को उस कमरे में प्रवेश कर सकता है।


आपको एक प्रोग्राम लिखना होगा जो प्रत्येक ग्राहक के लिए (उसी क्रम में जिसमें वे दिए गए हैं) उस कमरे का नंबर निर्धारित करेगा जिसमें उसे ठहराया जाएगा। कमरों की संख्या 1 से शुरू होती है। एल्गोरिदम "लालची" होना चाहिए: हमेशा एक नए अतिथि को पहले इस्तेमाल किए गए कमरे में न्यूनतम संभव नंबर के साथ ठहराने का प्रयास करें, और केवल अगर कोई खाली कमरा नहीं है & mdash; तो एक नया कमरा खोलें।


 

इनपुट फॉर्मेट

  n   पंक्तियाँ। प्रत्येक पंक्ति में एक स्थान से अलग दो संख्याएँ होती हैं:   day_arrival   और   day_departure (पूर्णांक)। ये पंक्तियाँ ग्राहकों से आवेदन प्रस्तुत करती हैं और यादृच्छिक क्रम में हो सकती हैं।

rn

अंत में एक पंक्ति "end" होगी।

आउटपुट फॉर्मेट

एक पंक्ति जिसमें   n   संख्याएँ एक अंतराल से अलग होती हैं।   i पंक्ति में वां नंबर — यह मूल सूची से   i -वें ग्राहक को आवंटित कमरे का नंबर है।

उदाहरण

इनपुट

1 5
8 10
2 4
6 9
1 3

समाप्त

आउटपुट

1 2 2 1 3

संकेत

There will be no clue here, decide for yourself!

main.py
परीक्षण 1
परीक्षण 2
परीक्षण 3
परीक्षण 4
परीक्षण 5
परीक्षण 6
परीक्षण 7
परीक्षण 8
परीक्षण 9
परीक्षण 10
डेवलपर का समाधान
# Создаем пустой список для хранения заявок от клиентов
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)

🎉 बधाई! 🎉

आपने कार्य को शानदार ढंग से हल किया! यह कठिन था, लेकिन आपने सही उत्तर खोजा। आप प्रोग्रामिंग में महारत के करीब हैं! ऐसे ही जारी रखें।

AD

विज्ञापन

red-snake blue-snake green-snake

कोड चल रहा है...

AI सहायक

नमस्ते! मैं आपका प्रोग्रामिंग सहायक हूँ। Python के बारे में कोई भी सवाल पूछें — मैं functions, methods समझा सकता हूँ और मौजूदा task में मदद कर सकता हूँ!