• Для того чтобы компы поддерживали актуальное время, они могут обращаться к серверам точного времени SNTP. К сожалению комп не может просто получить время у сервера,потому что информация по сети передается не мгновенно;пока сообщение с текущим временем дойдет до компа,оно потеряет свою актуальность .
    Протокол взаймодействия клиента выглядит
    1)Клиент отправляет запрос на сервер и запоминает вреия отправления A.
    2)Сервер получает запрос в момент времени B и отправляет клиенту сообщение содержащее время B
    3)Клиент получает ответ на свой запрос в момент вреиени C и запоминает его. Теперь клиент, из предположения,что сетевые задержки при передаче сообщений от клиента серверу и от сервера клиенту одинаковы может определить и установить себе точное время используя известные значения A,B,C. Ваи предстоит реализовать алогритм с точностью до скенунды определяющий точное время для установки на клиенте по известным A,B и C. При необходимости округлите резултат до целого числа секунд по правилам арифметики. Возможно что пока клиент ожидал ответа по клиентскому времени успели наступить новые сутки однако известно,что между отправкой клиентом запроса и получением ответа от сервера прошло менее 24 часов.
    Прграииа получает на вход три времменные метки A,B,C по одной в каждой строке.Все временные метки представлены в формате hh:mm:ss, где hh-это часы, mm-это минуты, ss-cеукнды.Часы,минуты и секунды записываются ровно двуия цифрами каждоею
    Программа должна вывести одну врмменную метку в формате,описаннои во входных данных-выичсленное точное время для установки на клиенте. В выводе не должно быть пробелов,пустых строк в начале вывода.

Ответы 1

  • Если на прохождение запроса нужно время t секунд. то с момента отправки запроса клиентом до получения ответа сервера пройдёт время 2t. Зная, что запрос был отправлен в момент времени A и получен ответ в момент времени C, можно вычислить t. Учитывая, что t секунд назад было время B, то сейчас время B + t.def timestamp_to_time(timestamp):    seconds = 0    for token in timestamp.split(":"):        seconds = seconds * 60 + int(token)    return seconds def time_to_timestamp(time):    seconds = time % 60    time //= 60    minutes = time % 60     time //= 60    hours = time % 24    return "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds) A = timestamp_to_time(input())B = timestamp_to_time(input())C = timestamp_to_time(input()) if C < A:    C += timestamp_to_time("24:00:00") t = (C - A + 1) // 2current_time = B + tprint(time_to_timestamp(current_time))  Пример ввода:23:59:5901:00:5100:00:20 Пример вывода:01:01:02
    • Автор:

      bean16
    • 5 лет назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years