Задача
В электронных часах произошел сбой, и теперь каждую секунду увеличивается не счетчик секунд, а счетчик часов. При переполнении счетчика часов (то есть при достижении $24$) он сбрасывается в $0$ и увеличивается счетчик минут. Аналогично, при переполнении счетчика минут происходит его сброс и увеличивается счетчик секунд. При переполнении счетчика секунд он также сбрасывается в $0$, а остальные счетчики так и остаются равными $0$. Известно, что сбой произошел в $h_1$ часов $m_1$ минут $s_1$ секунд. В этот момент часы показывали правильное время.
Напишите программу, определяющую по показаниям сломанных часов правильное время.
Входные данные
В первой строке задаются три целых числа $h_1$, $m_1$, $s_1$, определяющие время поломки часов. Во второй строке записаны три числа $h_2$, $m_2$, $s_2$, которые определяют показания часов в текущий момент времени ( $0\;\le\;h_1,\;h_2\;\lt\;24$, $0\;\le m_1,\;m_2,\;s_1,\;s_2\;\lt\;60$ ).
Выходные данные
В единственной строке выведите правильное время (т.е. число часов, минут и секунд) в момент, когда сломанные часы будут показывать $h_2$ часов $m_2$ минут $s_2$ секунд.
Тесты
Входные данные | Выходные данные |
---|---|
$12\;0\;0$ $12\;1\;0$ |
$12\;0\;24$ |
$13\;59\;59$ $12\;59\;59$ |
$13\;59\;58$ |
$15\;12\;16$ $15\;12\;16$ |
$15\;12\;16$ |
$0\;0\;0$ $23\;59\;59$ |
$23\;59\;59$ |
$16\;0\;17$ $16\;0\;18$ |
$16\;24\;17$ |
$11\;0\;53$ $0\;0\;0$ |
$13\;48\;42$ |
$1\;13\;18$ $22\;51\;32$ |
$7\;4\;51$ |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int h1, m1, s1, h2, m2, s2; int sum1, sum2, sec, time1, time2; int h3, m3, s3; h1 = sc.nextInt(); m1 = sc.nextInt(); s1 = sc.nextInt(); h2 = sc.nextInt(); m2 = sc.nextInt(); s2 = sc.nextInt(); sum1 = h1 + m1 * 24 + s1 * 24 * 60; sum2 = h2 + m2 * 24 + s2 * 24 * 60; sec = (sum2 - sum1 + 86400) % 86400; time1 = 3600 * h1 + 60 * m1 + s1; time2 = (time1 + sec) % 86400; s3 = time2 % 60; m3 = ((time2 - s3) / 60) % 60; h3 = (time2 - m3 * 60 - s3) / 3600; System.out.print(h3 + " " + m3 + " " + s3); } } |
Решение
Учитывая особенности хода сломанных часов, подсчитаем количество секунд в начальный и конечный моменты времени ( sum1 и sum2 ). Вычислим, сколько секунд прошло с момента поломки часов — для этого найдём разность sum2 - sum1 , прибавим $86400$ — количество секунд в сутках (поскольку мог произойти переход через момент времени $0\; : \;0\; : \;0$) и найдём остаток от деления полученной суммы на $86400$.
Теперь найдём количество секунд, прошедших с начала суток, в которых поломались часы ( time1 ). Прибавим к нему количество секунд, прошедших с момента поломки часов и найдём остаток от деления на $86400$ полученного числа. Имеем time2 — правильное время в секундах. Далее, находим значения счётчиков часов $h_3$, минут $m_3$ и секунд $s_3$ которые соответствуют моменту времени time2.
Ссылки
Условие задачи на e-olymp
Решение на ideone
Решение на e-olymp