Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3571638
А
Аноним
25 февраля 2026 17:34 · публичный вопрос
А
Аноним

Задача №4 «Подарок лепрекона» Маленький зелёный человечек за добрые дела может отблагодарить скромным серебряным шиллингом, который будет возвращаться к владельцу, а жадине может…

Запрос пользователя

Задача №4 «Подарок лепрекона» Маленький зелёный человечек за добрые дела может отблагодарить скромным серебряным шиллингом, который будет возвращаться к владельцу, а жадине может подарить золотой, который скоро превратится в кусок коры или рассыплется пеплом. Напиши программу для определения подарка от лепрекона. Формат ввода Вводятся строки: "добрый", "злой" или "Какой подарок?", пока не будет введена пустая строка. Формат вывода Считается количество введённых строк разного типа и на вопрос о подарке выводится ответ. Если строк "добрый" было больше, чем строк "злой", а последняя строка "добрый", то подарок — серебряный шиллинг. Если больше было строк "злой" и такая же последняя введённая, то подарок — золотой. Если вопрос задан при неопределённом значении подарка, выводится: "Ах, не знаю!" и программа завершает работу. После каждого вопроса строки считаются заново. headerless ||| |:---|:---| | Ввод | Вывод | |добрый добрый добрый злой добрый злой добрый Какой подарок? злой добрый злой злой добрый Какой подарок? добрый добрый |серебряный шиллинг Ах, не знаю! |

Ответ нейросети
25 февраля 2026 17:34

Задача называется “Задача №4 «Подарок лепрекона»”. Цель — понять логику определения подарка по последовательности строк и последнему введённому значению.

Краткий план решения

  • Мы держим счётчики для двух вариантов подарков:
    • добрый_count — сколько встречалось "добрый"
    • злой_count — сколько встречалось "злой"
  • Также запоминаем последнюю введённую строку типа героя: last_type, которая может быть "добрый", "злой" или None.
  • Ввод идёт до пустой строки. На каждую строку:
    • если строка "добрый" или "злой" — увеличиваем соответствующий счётчик и обновляем last_type.
    • если строка "Какой подарок?" — вычисляем подарок по правилам:
      • если добрый_count > злой_count и last_type == "добрый" → подарок серебряный шиллинг.
      • иначе, если злой_count > добрый_count и last_type == "злой" → подарок золотой.
      • иначе → "Ах, не знаю!" и программа завершается.
    • После вывода подарка (серебряный шиллинг или золотой) или сообщения об неопределённости — счётчики и last_type обнуляются и продолжаем чтение с чистого листа.
  • Порядок и условия строго соответствуют описанию: после каждого вопроса счётчики сбрасываются.

Пошаговый алгоритм

  1. Инициализируем: добрый_count = 0, злой_count = 0, last_type = None.
  2. Читаем ввод строк по одной, пока не встретится пустая строка.
  3. Если строка равна "добрый" или "злой":
    • увеличить соответствующий счётчик;
    • установить last_type в "добрый" или "злой".
  4. Если строка равна "Какой подарок?":
    • если добрый_count > злой_count и last_type == "добрый" → вывести "серебряный шиллинг" и сбросить счётчики и last_type.
    • else если злой_count > добрый_count и last_type == "злой" → вывести "золотой" и сбросить счётчики и last_type.
    • иначе вывести "Ах, не знаю!" и завершить программу.
  5. Повторяем шаги 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 и т.д.) по той же логике: поддерживайте счётчики, сохраняйте последнюю строку типа героя, обрабатывайте запрос "Какой подарок?" согласно трём условиям и сбрасывайте счётчики после каждого запроса.