Условие
Олимпиада началась в [latex]h_1[/latex] часов [latex]m_1[/latex] минут [latex]s_1[/latex] секунд, а закончилась в эти же календарные сутки в [latex]h_2[/latex] часов [latex]m_2[/latex] минут [latex]s_2[/latex] секунд. Сколько времени (час мин сек) проходила олимпиада?
Входные данные
В первой строке записано время начала, а во второй время окончания олимпиады в формате час мин сек.
[latex]0 \le h_1 \le h_2 \le 23[/latex], [latex]0 \le m_1, m_2 \le 59[/latex], [latex]0 \le s_1, s_2 \le 59[/latex].Выходные данные
В единственную строку выходного файла нужно записать время продолжительности олимпиады в формате час мин сек.
Тестирование
№ | Входные данные | Выходные данные |
1 | 9 30 0
12 45 30 |
3 15 30 |
2 | 9 30 30
12 45 0 |
3 14 30 |
3 | 9 45 0
12 30 30 |
2 45 30 |
4 | 9 45 30
12 30 0 |
2 44 30 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> using namespace std; int main() { int h1, m1, s1, h2, m2, s2; cin >> h1 >> m1 >> s1 >> h2 >> m2 >> s2; if (s2 < s1) { s2 += 60; m2 -= 1; } if (m2 < m1) { m2 += 60; h2 -= 1; } cout << h2 - h1 << " " << m2 - m1 << " " << s2 - s1; return 0; } |
Решение
Очевидным решением задачи является вывод через пропуск разниц [latex]h_2 — h_1[/latex], [latex]m_2 — m_1[/latex] и [latex]s_2 — s_1[/latex]. Однако если часы, минуты или секунды конца олимпиады будут меньше соответсвующих значений ее начала, то результат разницы разницы будет отрицательным. Чтобы этого избежать, существуют два if-блока, которые увеличивают количество секунд на [latex]60[/latex] и уменьшают количество минут на [latex]1[/latex], а так же выполняют аналогичные действия с минутами и часами в том случае, если входное количество минут или секунд начала олимпиады будут превышать соответственно минуты и секунды конца. После этого выводятся разницы, указанные в начале решения, которые теперь будут отображать реальную продолжительность олимпиады и гарантированно будут неотрицательными.
Ссылки
Условие задачи на E-Olymp;
Код программы на Ideone.com;
Подтверждение решения на E-Olymp.
Зачтено. Однако условные операторы совершенно избыточны. Вот простое решение
Почему условные операторы «зло»? Пока остановимся на двух причинах:
— Для каждой ветки программы нужно писать отдельные тесты.
— Усложняется восприятие логики программы.