Арнольд Шварценеггер стреляет в ужасного монстра Годзиллу из дробовика. Нужно найти общую величину урона, нанесённого Годзилле выстрелом.
Подсказка: возможно, для быстрой работы программы вам пригодится алгоритм Евклида.
Формат ввода
Сначала вводится количество дробинок.
Затем урон от каждой дробинки. Урон от каждой дробинки выражается простой дробью, её числитель и знаменатель вводятся на отдельных строках.
Формат вывода
Суммарный урон, выраженный простой несократимой дробью с дробной чертой между числителем и знаменателем.
напиши код на python
Информатика 10 класс Алгоритмы и структуры данных ключевые слова: информатика 10 класс урон Годзилла Арнольд Шварценеггер Новый
Давайте разберемся, как решить эту задачу шаг за шагом.
Понимание задачи: Нам нужно суммировать урон от нескольких дробинок, где урон каждой дробинки задан в виде простой дроби. Итоговый урон также должен быть представлен в виде простой несократимой дроби.
Ввод данных: Сначала вводится количество дробинок, а затем для каждой дробинки вводится числитель и знаменатель её урона.
Сложение дробей: Для сложения дробей необходимо привести их к общему знаменателю. Общий знаменатель можно найти как наименьшее общее кратное (НОК) знаменателей.
Упрощение дроби: После сложения дробей, итоговую дробь нужно упростить, разделив числитель и знаменатель на их наибольший общий делитель (НОД).
Алгоритм Евклида: Этот алгоритм поможет нам находить НОД, что необходимо как для нахождения НОК, так и для упрощения итоговой дроби.
Теперь напишем код, который реализует описанные шаги:
def gcd(a, b):
while b:
a, b = b, a % b
return a
def lcm(a, b):
return a * b // gcd(a, b)
def sum_fractions(fractions):
# Начальная сумма дробей
numerator_sum = 0
denominator_sum = 1
for numerator, denominator in fractions:
# Находим НОК текущего знаменателя и общего знаменателя
common_denominator = lcm(denominator_sum, denominator)
# Приводим числители к общему знаменателю
numerator_sum = (numerator_sum * (common_denominator // denominator_sum) +
numerator * (common_denominator // denominator))
# Обновляем общий знаменатель
denominator_sum = common_denominator
# Упрощаем итоговую дробь
common_divisor = gcd(numerator_sum, denominator_sum)
numerator_sum //= common_divisor
denominator_sum //= common_divisor
return numerator_sum, denominator_sum
# Ввод данных
n = int(input("Введите количество дробинок: "))
fractions = []
for _ in range(n):
numerator = int(input("Введите числитель дроби: "))
denominator = int(input("Введите знаменатель дроби: "))
fractions.append((numerator, denominator))
# Вычисляем суммарный урон
total_numerator, total_denominator = sum_fractions(fractions)
# Выводим результат
print(f"Суммарный урон: {total_numerator}/{total_denominator}")
Пояснение к коду:
gcd
реализует алгоритм Евклида для нахождения наибольшего общего делителя.lcm
использует НОД для нахождения наименьшего общего кратного.sum_fractions
проходит по всем дробям, суммирует их, приводя к общему знаменателю, и упрощает итоговую дробь.input
, и результаты вычислений выводятся в виде несократимой дроби.