Весенние старты 2026 з5

г. Иркутск

Конкурс юных программистов «Весенние старты» 2026
Номинация "Решение программистских задач"
Автор заданий Г.Б. Рейнгольд

Задача E. Восстановление примера (20 баллов)

У юного математика Пети имеются карточки. На одной карточке написан знак "=" (равно), на другой – "+" (плюс), на третьей – "-" (минус), на четвёртой – "*" (умножить), на пятой – "/" (разделить). Также имеется много карточек, на которых написаны натуральные числа в пределах 100. И есть ещё пустая карточка.

С помощью пяти карточек Петя сложил правильный арифметический пример. Сначала он положил карточку с числом, затем – с действием, затем – опять с числом, далее – со знаком "=" и последнюю – с числом.

После этого он вышел из комнаты. Его младший брат Вася зашёл в комнату, увидел карточки и решил пошутить. Он взял одну из карточек, составляющих пример, и заменил её на пустую.

Нужно сделать программу, которая восстановит исходную запись.

Пустая карточка обозначается знаком "_".

В случае неоднозначного ответа выводятся все правильные варианты в следующем порядке действий: "+", "-", "*", "/"

Пример 1.
Вход 2 _ 2 = 4

Выход 2 + 2 = 4
            2 * 2 = 4

Пример 2.
Вход 22 * 2 _ 44

Выход 22 * 2 = 44

Формат входных данных: Строка, в которой записан пример вышеуказанным способом, в котором один компонент заменён на знак "_" (все числа <=100 и >0). Компоненты записи примера разделяются пробелами.
 
Формат выходных данных: Одна или более строк, в которых записан пример согласно вышеуказанному способу. Компоненты записи примера разделяются пробелами.

Лимит времени на прохождение одного теста: 1 секунда.

Авторское решение (Python)

# Весенние старты 2026
# Задача E "Восстановление примера"
# Авторское решение
# Автор заданий Рейнгольд ГБ
#
# Для решения этой задачи достаточно уметь обращаться в переменными
# строковыми строкового и целого типов
# и уметь работать с ветвлением.
# Циклы, списки и прочее тут не нужны!
# Необходимо знать математику в объёме 3 классов.
# Но требуется большая аккуратность, так как много частных случаев.
# Для полной проверки этой задачи необходимы 20 тестов

a, o, b, r, c = map(str, input().split()) # Ввод данных
# a, b, c - числа, o - операция, r - знак =
if a != '_': # Поскольку данные вводятся в строковом виде,
             # операнды следует преобразовать к целому типу,
             # кроме случая неопределённости.
    a = int(a)
if b != '_':
    b = int(b)
if c != '_':
    c = int(c)
#print(a, o, b, r, c)
if a == '_': # 1-й операнд должен быть восстановлен
    if o == '+': # Далее идёт перебор операций с решением уравнения
        a = c - b
    if o == '-':
        a = c + b
    if o == '*':
        a = c // b
    if o == '/':
        a = b * c

if b == '_': # 2-й операнд должен быть восстановлен
    if o == '+':
        b = c - a
    if o == '-':
        b = a - c
    if o == '*':
        b = c // a
    if o == '/':
        b = a // c
       
if c == '_': # 3-й операнд должен быть восстановлен
    if o == '+':
        c = a + b
    if o == '-':
        c = a - b
    if o == '*':
        c = a * b
    if o == '/':
        c = a // b

if r == '_': # Восстановление знака =
    r = '='

if o == '_': # Восстановление операции
    if a + b == c:
        o = '+'
        print(a, o, b, r, c) # Вывод в ветвлении по причине
                # возможной неоднозначности
    if a - b == c:
        o = '-'
        print(a, o, b, r, c)
    if a * b == c:
        o = '*'
        print(a, o, b, r, c)
    if a // b == c:
        o = '/'
        print(a, o, b, r, c)
else:
    print(a, o, b, r, c) # Вывод с случаях, если не восстанавливалась операция


Рецензии
Все это вызывает искреннее уважение:—))с уважением:—))удачи в творчестве.

Александр Михельман   15.05.2026 16:32     Заявить о нарушении