Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202

Марсианские часы

06.08.2020, 12:23. Показов 6907. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В марсианских сутках N часов. У марсиан Ятеп и Ашам есть часы со стрелками, которые работают почти так же, как земные — большая стрелка делает один оборот в час, а маленькая — один оборот в сутки. Ятеп и Ашам поссорились и решили не разговаривать, пока стрелки часов не совпадут. Определите точный момент времени, когда это случится.

Входные данные

В первой строке входных данных задано число тестов K (0≤K≤104), далее для каждого теста указаны целые числа N, A, B и C (1<N≤109, 0≤A, 0≤B<109). Числа A, B и C означают, что Ятеп и Ашам поссорились в A+B/C часов.

Выходные данные

Для каждого теста выведите искомое время в том же формате: числа A, B и C, такие, что искомое время равно A+B/C (0≤A,0≤B, дробь B/C — несократимая).

Примеры
Ввод
Вывод
2
12 11 0 1
12 0 0 1
0 0 1
1 1 11
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2020, 12:23
Ответы с готовыми решениями:

Перевод земных лет в марсианские
Напишите программу для перевода земных лет в марсианские. Программа на вход принимает цифру (возраст в земных годах), а возвращает уже...

Перевод Земных дней в Марсианские солы
Приветствую! Дана задача, перевод земных дней и часов в марсианские солы *в одном запросе* известно что, один сол равен - 1, 02595675...

Марсианские блоки
На планете Марс 100 государств объединены в блоки, в каждом из которых не больше 50 государств. Известно, что любые два государства...

7
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.08.2020, 13:29
Python
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
26
27
28
29
30
31
def gcd(x, y):
    while y != 0:
        (x, y) = (y, x % y)
    return x
 
for _ in range(int(input())):
    n, a1, b1, c1 = map(int,input().split())
    if n > 2 :
# совпадение стрелок происходит в А + А/(N-1) часов
# определяем текущее положение минутной 
# стрелки относительно часовой - "до" или "после"
# так как В и С могут быть большими, то воспользуемся:
# (В/С)*((N-1)*С) и (А/(N-1))*((N-1)*C)
# получим В*(N-1) и А*С
# если текущее положение больше или равно, то к А прибавляем 1
        if b1*(n-1) >= a1*c1 :
            a1 += 1
# если полученное кол-во часов больше или равно N-1
# то встреча в "полночь"
        if a1 >= n - 1 :
            a1, b1, c1 = 0, 0, 1
        else :
# создание "несократимой дроби" В/С
                k = gcd(a1,n-1)
                b1 = a1//k
                c1 = (n-1)//k
# если в сутках 2 часа, то встреча всегда в "полночь"
# если в сутках 1 час, то стрелки всегда совпадают
    elif n == 2:
        a1, b1, c1 = 0, 0, 1
    print(a1,b1,c1)
7
0 / 0 / 0
Регистрация: 17.08.2020
Сообщений: 1
17.08.2020, 00:09
Здравствуйте. Могли бы вы объяснить, почему совпадение стрелок происходит в А + А/(N-1) часов?? Я просто никак не понимаю)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
17.08.2020, 05:22
За сутки минутная стрелка совершит N оборотов, часовая - 1. Значит минутная стрелка за сутки обгонит часовую N-1 раз :После очередной "встречи" минутной стрелке надо пройти 1+1/(N-1) оборот, чтобы снова догнать часовую. Отсюда - в А-й (в задаче) час минутная стрелка совершит А*(1+1(N-1)) или A+A/(N-1) оборотов (с "0" часов), что и показывает время "совпадения стрелок".
1
0 / 0 / 0
Регистрация: 29.07.2020
Сообщений: 31
24.08.2020, 18:37
Gdez, Здравствуйте! Это снова я Я бы хотел задать пару вопросов по вашему решению. Вы ранее писали, что час совпадения стрелок можно высчитать по формуле А*(1+1(N-1)). Почему вы умножаете количество оборотов минутной стрелки на час отсчёта (час ссоры марсиан)? Откуда вы вывели формулы (В/С)*((N-1)*С), (А/(N-1))*((N-1)*C) и как из них впоследствии получилось В*(N-1) и А*С? Спасибо за ответ.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.08.2020, 20:43
По поводу : формулы (В/С)*((N-1)*С), (А/(N-1))*((N-1)*C)
Я так сравниваю на самом деле В/С и А/(N-1)
При больших, но разных В, С, А, N при целых числах результат деления становится вещественным с ДОПУСТИМОЙ точностью. Компьютер может "приравнять" разные результаты, отличающиеся после, допустим, 30 значещей цифры после запятой.
Запустите код :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = 1000000001
b = a + 1
c = b + 1
n = c + 1
if a / b == c / n :
    print('Yes')
else :
    print('No')
    # Умножим (a / b) и (c / n) на (b * n)
if a * n == b * c :
    print('Yes')
else :
    print('No')
Я просто сравниваю не дроби, а привожу их к одному знаменателю и сравниваю числители двух дробей.
При этом компьютер работает с ЦЕЛЫМИ числами без "своего" округления

Добавлено через 13 минут
Почему вы умножаете количество оборотов минутной стрелки на час отсчёта (час ссоры марсиан)?
Следующим оператором проверяю - они поссорились до или после совпадения стрелок в текущем часе ( по нашему времени допустим в 01:00 или 01:15, а совпадение стрелок в ~ 01:05 в текущем (01) часе
0
0 / 0 / 0
Регистрация: 29.07.2020
Сообщений: 31
25.08.2020, 18:21
Gdez, прошу прощения, что отвечаю так долго, обычно пишу вам ночью Спасибо за объяснение, теперь я понимаю смысл данных манипуляций. Умно однако, когда я садился за решение, то боялся, что придётся опять работать с вещественными числами. Но у меня, как обычно, есть пара вопросов. Буду очень благодарен, если сможете ответить. Почему вы находите положение часовой стрелки по формуле A/N-1, а не A/N? Понятно, что минутная стрелка обгоняет часовую N-1 раз, но когда мы высчитываем местоположение стрелки, мы же должны брать во внимание весь циферблат, то есть N часов.

Каким образом формируется дробь B/С (минуты). Почему именно эта дробь (B/C) в несокращённом виде выглядит как A/N-1 (Алгоритм её сокращения мне понятен)

Почему встреча стрелок происходит в полночь, если в сутках 2 часа? А если минутная стрелка расположена до часовой? Тогда она может догнать часовую за несколько минут/секунд (Зависит от условия, где расположены стрелки), если я например расположу ее за миллиметр до часовой.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
25.08.2020, 19:32
Почему вы находите положение часовой стрелки по формуле A/N-1, а не A/N?
Пусть N=12 (как у нас на часах)
Стрелки встретятся 11 раз в (минуты приближенно)
00:00
01:06
02:12
03:17
04:22
05:28
06:34
07:39
08:44
09:49
10:54
11:60 = 12:00
Так как в задаче минуты задаются ЧАСТЬЮ КРУГА ЦИФЕРБЛАТА (отсюда дробь <= 1).
Встреча стрелок происходит 11 раз, значит круг разбивается на 11 (не 12 !!!) секторов, где их границы - момент совпадения стрелок.
Получается каждый сектор = 1 / 11 часть от 360'. Эти границы секторов находятся по одному(!) между часовыми делениями. Первый сектор заканчивается между 01 и 02 часами, второй между 02 и 03 и т.д.
Поэтому числитель в дроби встречи показывает последнее прошедшее часовое деление часовой стрелкой или "А"

Добавлено через 7 минут
Почему встреча стрелок происходит в полночь, если в сутках 2 часа?
Представь на наших часах - полночь - часовая и минутная стрелки на 12. Через час - часовая на 6, а минутная на 12. Часовая сделала полкруга, а минутная полкруга, так и не догнав часовую.
Через час часовая на 12 и минутная, догнав ее, тоже на 12.
Получилось, прошло два часа, когда они вновь встретились. А так как в сутках 2 часа, то встреча в полночь. Кстати, полдень при этом в "шесть" часов)))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2020, 19:32
Помогаю со студенческими работами здесь

Марсианские факториалы
В 3141 году очередная экспедиция на Марс обнаружила в одной из пещер таинственные знаки. Они однозначно доказывали существование на Марсе...

Марсианские факториалы PASCAL
В 3141 году очередная экспедиция на Марс обнаружила в одной из пещер таинственные знаки. Они однозначно доказывали существование на Марсе...

Марсианские парники не только возможны, но и эффективнее земных
Будущие покорители Марса могли бы питаться тем, что привезут с Земли, и использовать сложные механические системы для получения кислорода и...

нужно сделать аналоговые часы с тремя циферблатами. на разных часы, минуты, секунды.
нужно сделать аналоговые часы с тремя циферблатами. на разных часы, минуты, секунды. немного не получилось убрать след от секундной...

Флеш часы: часы, показывающие указанное время
Привет всем!!!Помогите пожалуйста!!!Как создать флеш часы чтобы они показывали разное указанное время. Весь инет прошарил нигде нет! в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru