e-olymp 7366. Сколько до Нового Года?

Задача

У Деда Мороза есть часы, которые в секундах показывают сколько осталось до каждого Нового Года. Так как Дед Мороз уже человек в возрасте, то некоторые математические операции он быстро выполнять не в состоянии. Помогите Деду Морозу определить сколько полных дней, часов, минут и секунд осталось до следующего Нового Года, если известно сколько осталось секунд, т.е. разложите время в секундах на полное количество дней, часов, минут и секунд.

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

В единственной строке целое число [latex]N \left(0 < N ≤ 31500000\right)[/latex] – количество секунд, которые остались до наступления Нового Года.

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

В одной строке через пропуск четыре целых числа – количество полных дней, часов, минут и секунд. После последнего числа пробел отсутствует.

Тесты

# Входные данные Выходные данные
1 5217656 60 9 20 56
2 7999 0 2 13 19
3 30123456 348 15 37 36
4 7841186 90 18 6 26
5 899650 10 9 54 10

Код

Решение задачи

Вспомним, что:
1 сутки = 86400с;
1 час = 3600с;
1 минута = 60с.

Сперва рассчитаем кол-во полных суток в данном кол-ве секунд [latex]n[/latex]: [latex]\frac{n}{86400}[/latex].
Затем уберём кол-во секунд в полных сутках из исходного числа, а из оставшихся вычислим кол-во полных часов: [latex]\frac{n\bmod86400}{3600}[/latex].
Далее снова уберём кол-во секунд в полных часах и найдём кол-во полных минут: [latex]\frac{\left(n\bmod8640\right)\bmod3600}{60}[/latex].
Остаток от деления общего кол-ва секунд на 60 и будет искомым кол-вом секунд: [latex]n\bmod60[/latex].

Ссылки

Условие задачи на e-olymp
Код решения на ideone

e-olymp 111. Часы

Часы.

Постановка задачи

Часы с боем пробивают каждый час такое количество ударов, сколько их есть на циферблате с цифрами от 1 до 12, и по одному разу тогда, когда минутная стрелка указывает на цифру 6. Зная начальное и конечное время в рамках одних календарных суток (выраженное в часах и минутах), подсчитать общее количество ударов на этом промежутке времени.

Алгоритм решения

Заведем переменную, которая будет отвечать за количество пробитых ударов. Если в начальное время минутная стрелка указывает на число 12, то увеличиваем значение нашей переменной на такое число, на которое указывает часовая стрелка, если же в начальное время минутная стрелка указывает на число 6, то увеличиваем значение переменной на 1. Увеличиваем начальное время на 1 минуту. Повторяем, пока начальное время не будет совпадать с конечным.

Тесты

Входные данные Выходные данные
Начальное время Конечное время Количество ударов
13:30 15:10 7
0:00 23:59 180
12:30 12:30 1
22:08 22:22 0

Реализация

ideone: ссылка
Засчитаное решение на e-olymp: ссылка

 

e-olymp 125. Олимпиада

Молоканов Юрий
Молоканов Юрий

Latest posts by Молоканов Юрий (see all)

Условие

Олимпиада началась в [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

Код

Решение

Очевидным решением задачи является вывод через пропуск разниц  [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.

Ю 4.37

Задача

Автостоп-2. Из пункта А в пункт В, между которыми [latex]s[/latex] км, выехал велосипедист с постоянной скоростью [latex]v_{0}[/latex] км/ч. Навстречу ему — из пункта В — другой путешественник решил добраться «автостопом» — на разных видах попутного транспорта. Перед каждым участком он [latex]\tau _{i}[/latex] минут «голосует», ожидая попутного транспорта, затем движется [latex]t _{i}[/latex]  часов со скоростью [latex]v _{i}[/latex] км/час ( величины [latex]\tau _{i}, t _{i}, v _{i}, i=1,2,\ldots,n[/latex]  заданы в соответствующих массивах). Через какое время после старта и на каком расстоянии от пункта А путники встретятся?

Тесты

s [latex]v_{0}[/latex] n [latex]\tau _{i}[/latex] [latex]t _{i}[/latex] [latex]v _{i}[/latex] place, км  time, ч Комментарий
100.0 30.0  1 60.0 1.0 40.0 60.0 2.0 Пройден
100.0 10.0 1 0.0 1.0 40.0 Путники не доехали до места встречи Не пройден
130.0 15.0 2 0.0 3.0 1.0 2.6 40.0 33.3 2.587267 38.809006 Пройден

 

Код программы

Вначале программы вводим во входной поток и считываем данные. Далее, в цикле, проверяем несколько условий, таких как:

  1. Пока второй ждал — первый уже проехал весь путь.
  2. Если после i-ого этапа (т.е. после ожидания транспортного средства, поездки на нем) сумма пройденного пути второго и первого путника больше, чем весь путь.

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

Код на Java

 

Ю3.6

Калачьов Андрій Сергійович
Калачьов Андрій Сергійович

Latest posts by Калачьов Андрій Сергійович (see all)

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Задача:  Время обработки. Каждая из деталей должна последовательно пройти обработку на каждом из 3-х станков. Продолжительности обработки каждой детали на каждом станке вводятся группами по 3 числа, до исчерпания ввода. Сколько времени займет обработка всех деталей?

Количество деталей Время обработки Ответ
3 1 2 3 4 5 6 7 8 9 29
2  4 5 6 -5 4 5 Ошибка
2 5 4 3 2 4 0 13

Решение:

Ссылка на ideone C++: http://ideone.com/sKN2FU

Ссылка на ideone Java: http://ideone.com/ZwNfNL

Введем 3 переменные  [latex]t1, t2, t3 [/latex] , обозначающие время обработки детали на каждом из 3х станков и переменные [latex]x, y, z [/latex] которые будут показывать общее время обработки на каждом станке. Дольше всех будет работать 3й станок, поэтому наша задача вычислить время обработки на нем всех деталей.

Вычисляем время обработки всех деталей:

Если у нас не было введено время обработки меньше нуля, то выводим общее время работы третьего станка.

 

А69

Оніщенко Олександр
Оніщенко Олександр

Latest posts by Оніщенко Олександр (see all)

Задача:   Часовая стрелка образует угол [latex]\varphi[/latex] с лучом, проходящим через центр  и через точку, соответствующую  [latex]12[/latex]  часам на циферблате, [latex] 0 < \varphi \leq 2\pi[/latex]. Определить значение угла для минутной стрелки, а также количество часов и полных минут.

Тесты

[latex]\varphi[/latex] Часы Минуты [latex]\alpha[/latex] Комментарий
30 1 0.00 0.00 Пройден
360 12 0.00 0.00 Пройден
1 0 2.00 12.00 Пройден
149.9 4 59.8 358.80 Пройден

Код

 

В условии задачи сказано, что [latex] 0 < \varphi \leq 2\pi[/latex], значит вводимое значение угла [latex]\varphi[/latex] — не может быть отрицательным  и  быть больше 360 градусов. Угол [latex]\alpha[/latex] — угол между минутной стрелкой и лучом. Один час — 30 градусов, что бы узнать количество часов нам следует  поделить введенный угол [latex]\varphi[/latex] на 30 градусов. Но перед этим   важно узнать остаток от этого деления, если такой имеется.  Если остаток равен 0, значит минутная стрелка показывает 0 минут и можно смело вывести значения  часов ( поделив [latex]\varphi[/latex] на 30),  минут и угла [latex]\alpha[/latex]( 0 ). Если  остаток все же не равен 0, нужно отнять его от [latex]\varphi[/latex]   и разделить на 30 градусов.  Так-как в одном часе 60 минут, а остаток не может быть больше 30 градусов, умножаем его на 2 и получаем количество минут. Подобную операцию проводим над углом [latex]\alpha[/latex], но в этот раз умножаем на 12. Выводим значения часов, минут и угла [latex]\alpha[/latex].

Ссылка на Ideone

Код для Java

Ссылка на Ideone