Задача называется “Задача №4 «Подарок лепрекона»”. Цель — понять логику определения подарка по последовательности строк и последнему введённому значению.
Краткий план решения
- Мы держим счётчики для двух вариантов подарков:
- добрый_count — сколько встречалось "добрый"
- злой_count — сколько встречалось "злой"
- Также запоминаем последнюю введённую строку типа героя: last_type, которая может быть "добрый", "злой" или None.
- Ввод идёт до пустой строки. На каждую строку:
- если строка "добрый" или "злой" — увеличиваем соответствующий счётчик и обновляем last_type.
- если строка "Какой подарок?" — вычисляем подарок по правилам:
- если добрый_count > злой_count и last_type == "добрый" → подарок серебряный шиллинг.
- иначе, если злой_count > добрый_count и last_type == "злой" → подарок золотой.
- иначе → "Ах, не знаю!" и программа завершается.
- После вывода подарка (серебряный шиллинг или золотой) или сообщения об неопределённости — счётчики и last_type обнуляются и продолжаем чтение с чистого листа.
- Порядок и условия строго соответствуют описанию: после каждого вопроса счётчики сбрасываются.
Пошаговый алгоритм
- Инициализируем: добрый_count = 0, злой_count = 0, last_type = None.
- Читаем ввод строк по одной, пока не встретится пустая строка.
- Если строка равна "добрый" или "злой":
- увеличить соответствующий счётчик;
- установить last_type в "добрый" или "злой".
- Если строка равна "Какой подарок?":
- если добрый_count > злой_count и last_type == "добрый" → вывести "серебряный шиллинг" и сбросить счётчики и last_type.
- else если злой_count > добрый_count и last_type == "злой" → вывести "золотой" и сбросить счётчики и last_type.
- иначе вывести "Ах, не знаю!" и завершить программу.
- Повторяем шаги 2–4 до пустой строки.
Сложность
- Временная: O(n), где n — количество введённых строк.
- Пространство: O(1) для учёта счётчиков и последнего типа (последовательности не требуют хранения всего ввода).
Пример реализации на Python
- Важно: вывод должен точно соответствовать заданным строкам, включая регистр и пробелы.
Программа (Python)
def main(): import sys
добрый_count = 0
злой_count = 0
last_type = None # может быть "добрый" или "злой"
for raw in sys.stdin:
s = raw.strip()
if s == "":
break # пустая строка завершает ввод
if s == "Какой подарок?":
if добрый_count > злой_count and last_type == "добрый":
print("серебряный шиллинг")
elif злой_count > добрый_count and last_type == "злой":
print("золотой")
else:
print("Ах, не знаю!")
return
# после вопроса — учёт начинается заново
добрый_count = 0
злой_count = 0
last_type = None
elif s == "добрый" or s == "злой":
if s == "добрый":
добрый_count += 1
else:
злой_count += 1
last_type = s
# если пришла какая-то посторонняя строка, можно игнорировать или завершить с ошибкой.
# здесь игнорируем не ожидаемые строки.
if name == "main": main()
Как пользоваться
- Запустите программу и подайте строки по одному в стандартный вход:
- добрый
- злой
- добрый
- Какой подарок?
- злой
- добрый
- злой
- злой
- добрый
- Какой подарок?
- добрый
- добрый
- [пустая строка]
- Для первого кейса программа выведет "серебряный шиллинг".
- После второго кейса — "Ах, не знаю!" и программа завершится.
Можно адаптировать решение под другие языки программирования (C++, Java, JavaScript и т.д.) по той же логике: поддерживайте счётчики, сохраняйте последнюю строку типа героя, обрабатывайте запрос "Какой подарок?" согласно трём условиям и сбрасывайте счётчики после каждого запроса.