Редакция для Перевод секунд в часы, минуты и секунды
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Автор:
1. Идея
Нужно разложить общее количество секунд t на три части:
- часы;
- минуты после вычета часов;
- секунды после вычета часов и минут.
Это стандартная задача на деление с остатком.
Сначала найдём, сколько раз в t помещается 3600 секунд — это будут полные часы.
Потом посмотрим, сколько секунд осталось после часов, и из этого остатка найдём полные минуты.
То, что останется после минут, и будет количеством секунд.
2. Наблюдения
- В одном часе
3600секунд. - В одной минуте
60секунд. - Целочисленное деление помогает узнать количество полных единиц времени.
- Остаток от деления показывает, сколько осталось после выделения этих полных единиц.
Разберём по шагам:
t / 3600— сколько полных часов прошло.t % 3600— сколько секунд осталось после вычета часов.(t % 3600) / 60— сколько полных минут в оставшихся секундах.t % 60— сколько секунд осталось после вычета минут.
Например, если t = 3665:
- часов:
3665 / 3600 = 1 - остаток после часов:
3665 % 3600 = 65 - минут:
65 / 60 = 1 - секунд:
65 % 60 = 5
Ответ: 1 1 5.
3. Алгоритм
- Считать число
t. - Вычислить
h = t / 3600. - Вычислить
m = (t % 3600) / 60. - Вычислить
s = t % 60. - Вывести
h,m,s.
4. Почему это работает
Пусть дано число секунд t.
Сначала выделим часы:
- каждые
3600секунд составляют один полный час; - значит, число полных часов равно
t // 3600.
После этого остаётся:
t % 3600секунд, то есть меньше3600, значит там уже не может быть ещё одного полного часа.
Теперь из этого остатка выделим минуты:
- каждые
60секунд составляют одну минуту; - число полных минут равно
(t % 3600) // 60.
После выделения минут остаются секунды:
t % 60.
Таким образом:
h— полные часы;m— полные минуты после вычета часов;s— оставшиеся секунды после вычета часов и минут.
Именно это и требуется по условию.
5. Сложность
Все вычисления выполняются за константное время.
- Время:
O(1) - Память:
O(1)
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
int h = t / 3600;
int m = (t % 3600) / 60;
int s = t % 60;
cout << h << " " << m << " " << s;
return 0;
}
7. Код на Python 3
t = int(input())
h = t // 3600
m = (t % 3600) // 60
s = t % 60
print(h, m, s)
Комментарии