Васильку
известно, что святой Николай начинает развозить подарки, когда стемнеет, а
заканчивает – когда светает. Ему интересно: сколько времени будет у Николая для
того, чтобы раздать всем подарки.
Вход. В единственной строке заданы t1 и t2 – время, когда Николай начинает и когда заканчивает
развозить подарки, в формате hh : mm : ss.
Выход. Вывести
время, которое Николай использует для доставки подарков в формате hh : mm
: ss. Гарантируется, что это время не
превышает 12 часов.
Пример входа |
Пример выхода |
19:00:00
21:00:00 |
02:00:00 |
элементарная
задача
Анализ алгоритма
Преобразуем
начальное и конечное время в секунды. Времени hh : mm : ss соответствует 3600 * hh + 60 * mm + ss секунд.
Вычислим разницу
t2 – t1 между ними. Если она отрицательная, то полночь
принадлежит времени, когда Николай развозит подарки. В таком случае к отрицательной
разнице следует прибавить 3600 * 24 – количество секунд в сутках. Далее
вычисляем сколько часов, минут и секунд составляет найденная разница.
Пусть d – время
развозки подарков в секундах. Преобразование его в часы h, минуты m и секунды s аналогично представлению числа d в шестидесятиричной системе счисления:
·
h = d / 3600;
·
m = (d % 3600) / 60;
·
s = d % 60;
Для d = 18886 имеем:
·
h = 18886 / 3600 = 5;
·
m = (18886 % 3600) / 60 = 14;
·
s = 18886 % 60 = 46;
Реализация алгоритма
Читаем входные
данные. Преобразуем начальное и конечное время в секунды.
scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
t1
= h1 * 3600 + m1 * 60 + s1;
t2
= h2 * 3600 + m2 * 60 + s2;
Вычисляем разницу времен t2 и t1
в секундах. Если t2 < t1, то время t2 принадлежит
следующим суткам.
d
= t2 - t1;
if
(d < 0) d += 3600*24;
// d = (t2 - t1 + 3600*24) % (3600*24);
Преобразуем разницу d
в часы h3, минуты m3 и секунды s3.
h3
= d / 3600;
m3
= (d % 3600) / 60;
s3
= d % 60;
Выводим ответ в формате времени. Формат %02d означает
вывод целого двузначного числа. Причем если число является однозначным, то
перед ним выводится 0. Например, если количество минут равно 4, то выведется
04. Если количество минут равно 0, то выведется 00.
printf("%02d:%02d:%02d\n",h3,m3,s3);
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
String s = con.next();
StringTokenizer st1 = new
StringTokenizer(s, ":");
int h1 = Integer.parseInt(st1.nextToken());
int m1 = Integer.parseInt(st1.nextToken());
int s1 = Integer.parseInt(st1.nextToken());
s = con.next();
st1 = new
StringTokenizer(s, ":");
int h2 = Integer.parseInt(st1.nextToken());
int m2 = Integer.parseInt(st1.nextToken());
int s2 = Integer.parseInt(st1.nextToken());
int t1 = h1 * 3600 + m1 * 60 + s1;
int t2 = h2 * 3600 + m2 * 60 + s2;
int d = (t2 - t1 + 3600*24) %
(3600*24);
int h3 = d / 3600; d = d % 3600;
int m3 = d / 60;
int s3 = d % 60;
System.out.printf("%02d:%02d:%02d\n",h3,m3,s3);
con.close();
}
}