Давайте решим эту задачу шаг за шагом. Мы знаем, что светофор работает по определенному циклу: красный, красный с желтым, зеленый, желтый. То есть один полный цикл состоит из четырёх этапов:
- Красный: горит \(a\) секунд.
- Красный с желтым: горит \(b\) секунд.
- Зеленый: горит \(c\) секунд.
- Желтый: горит \(b\) секунд.
Таким образом, продолжительность одного полного оборота светофора (один цикл) можно вычислить как:
\[ T = a + b + c + b = a + 2b + c \]
Теперь давайте посчитаем, сколько раз светофор прошел полный цикл за \(N\) секунд, а также сколько времени осталось после завершения всех полных циклов.
Определим количество полных циклов \(k\): \[ k = \left\lfloor \frac{N}{T} \right\rfloor \] Здесь \(\lfloor x \rfloor\) — это целая часть числа \(x\).
Определим оставшееся время \(r\): \[ r = N - k \cdot T \]
Теперь найдем, сколько времени светил каждый цвет светофора.
Шаг 1: Найдем общее время для каждого цвета за полные циклы
Красный:
- Горит \(a\) секунд в каждой полной части + \(b\) секунд в красном с желтым.
- Всего: \[ \text{Красный} = k \cdot (a + b) \]
Желтый:
- Горит \(b\) секунд в красном с желтым и ещё \(b\) секунд, когда просто желтый.
- Всего: \[ \text{Желтый} = k \cdot 2b \]
Зеленый:
- Горит только по отдельности в цикле.
- Всего: \[ \text{Зеленый} = k \cdot c \]
Шаг 2: Учтем оставшееся время
Теперь нам нужно учесть оставшееся время \(r\):
Если \(r\) меньше \(a\), то красный будет гореть все \(r\) секунд, и мы завершаем.
Если \(r\) больше \(a\), то:
- Красный будет гореть \(a\) секунд.
- Затем у нас останется \(r - a\) секунд.
Если оставшееся время \(r\) всё еще больше, то:
- Горит \(b\) секунд (красный с желтым). Если \(r - (a + b)\) больше 0, то:
Затем зелёный:
- Горит \(c\) секунд. Если после желтого осталось время больше \(c\), то:
- Возвращаемся к желтому и считаем его горение.
После того, как мы посчитаем все это, у нас будет итоговое время для каждого цвета.
Вот полный алгоритм в коде на Python:
def traffic_light(a, b, c, N):
T = a + 2 * b + c # продолжительность одного полного цикла
k = N // T # количество полных циклов
r = N % T # оставшееся время
red_time = k * (a + b)
yellow_time = k * 2 * b
green_time = k * c
if r > 0: # учитываем оставшееся время
if r <= a:
red_time += r
else:
red_time += a
r -= a
if r <= b:
yellow_time += r
else:
yellow_time += b
r -= b
if r <= c:
green_time += r
else:
green_time += c
r -= c
if r <= b:
yellow_time += r
else:
yellow_time += b
return (red_time, yellow_time, green_time)
# Пример входных данных
a = 20
b = 5
c = 25
N = 120
result = traffic_light(a, b, c, N)
print(result) # Вывод: (60, 20, 50)
Этот код принимает значения \(a\), \(b\), \(c\), \(N\) и возвращает общее время для каждого сигнала светофора. Вы можете запустить его с другими значениями, чтобы получить результаты для других случаев.