Задание №16 — Алгоритмы и программирование
Напишите программу для решения следующей задачи.
Участники парусной регаты стартовали одновременно. На финише фиксировалось время прохождения маршрута каждой яхтой (в часах и минутах). Определите время победителя регаты (в часах и минутах). Известно, что соревнования проходили в течение 12 часов.
Программа получает на вход количество яхт, принимавших участие в регате
N (1 ≤ N ≤ 100), затем для каждой яхты вводится два числа: часы и минуты, затраченные на прохождение маршрута.
Пример работы программы:
Входные данные | Выходные данные |
2 3 25 2 50 | 2 50 |
Проверка решения с помощью ИИ доступна авторизованным пользователям
Решение.
Для решения этой задачи нам необходимо найти минимальное время прохождения маршрута, так как победителем считается тот, кто затратил меньше всего времени.
Шаг 1: Анализ входных данных.
Нам дано количество яхт . Для каждой яхты вводится два значения: часы и минуты. Чтобы удобно сравнивать время разных участников, лучше всего перевести всё время в одну единицу измерения — в минуты.
Шаг 2: Формула перевода.
Так как в одном часе 60 минут, общее время в минутах вычисляется по формуле:
.
Шаг 3: Алгоритм поиска минимума.
1. Сначала вводим количество яхт .
2. Заводим переменную для хранения минимального времени. Изначально присвоим ей очень большое значение, которое точно больше возможного времени гонки (например, , так как гонка длилась не более 12 часов).
3. В цикле для каждой яхты:
а) Считываем часы и минуты.
б) Вычисляем общее время в минутах.
в) Если текущее время меньше нашего минимума, обновляем значение минимума.
4. После завершения цикла переводим найденный минимум обратно в часы и минуты.
Шаг 4: Обратный перевод.
Чтобы получить часы из общего количества минут, используем целочисленное деление на 60:
.
Чтобы получить остаток минут, используем операцию взятия остатка:
.
Пример реализации на языке Python:
n = int(input())
min_total_minutes = 13 * 60 # Максимально возможное время + запас
for i in range(n):
h, m = map(int, input().split())
current_total = h * 60 + m
if current_total < min_total_minutes:
min_total_minutes = current_total
print(min_total_minutes // 60, min_total_minutes % 60)
В примере: для яхты 1 (3 ч 25 мин) общее время мин. Для яхты 2 (2 ч 50 мин) общее время мин. Минимум — 170 минут, что соответствует 2 ч 50 мин.
Ответ: 2 50
Источник: ФИПИ