Весенние старты 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) # Вывод с случаях, если не восстанавливалась операция
Свидетельство о публикации №226051501360
Александр Михельман 15.05.2026 16:32 Заявить о нарушении