Редакция для Перевод секунд в часы, минуты и секунды


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.

Автор: montes332

1. Идея

Нужно разложить общее количество секунд t на три части:

  • часы;
  • минуты после вычета часов;
  • секунды после вычета часов и минут.

Это стандартная задача на деление с остатком.

Сначала найдём, сколько раз в t помещается 3600 секунд — это будут полные часы.

Потом посмотрим, сколько секунд осталось после часов, и из этого остатка найдём полные минуты.

То, что останется после минут, и будет количеством секунд.

2. Наблюдения

  1. В одном часе 3600 секунд.
  2. В одной минуте 60 секунд.
  3. Целочисленное деление помогает узнать количество полных единиц времени.
  4. Остаток от деления показывает, сколько осталось после выделения этих полных единиц.

Разберём по шагам:

  • 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. Алгоритм

  1. Считать число t.
  2. Вычислить h = t / 3600.
  3. Вычислить m = (t % 3600) / 60.
  4. Вычислить s = t % 60.
  5. Вывести 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)

Комментарии

Еще нет ни одного комментария.