Матч 363, Зеркальные часы (MirroredClock)

Дивизион 2, Уровень 1

 

Вы сидите перед зеркалом, в котором отражаются сзади находящиеся часы. Строка time содержит время, наблюдаемое Вами в зеркале. Вам необходимо установить реальное время на часах. Часы изменяются от 0 до 11, минуты – от 0 до 59.

Например, если в зеркале Вы видите время “10:00”, то реально сейчас “02”00”.

 

Класс: MirroredClock

Метод: string whatTimeIsIt(string time)

Ограничения: time имеет формат “HH:MM”, где HH и MM двоцифровые числа, 00 £ HH £ 11, 00 £ MM £ 59.

 

Вход. Строка time, содержащая зеркальное время.

 

Выход. Строка, содержащая реальное время на часах.

 

Пример входа

time

“10:00”

“01:15”

“03:40”

 

Пример выхода

“02:00”

10:45

“08:20”

 

РЕШЕНИЕ

элементарные вычисления

 

Если часы показывают точное количество часов, то достаточно пересчитать часы. Их значение равно 12 – h, где h – зеркальное число часов. При этом следует помнить, что если изначально h = 0 , то h станет равным 12. Поэтому результирующее количество часов следует брать по модулю 12. Если минутная стрелка не показывает 0 минут, то формула пересчета часов и минут следующая: h = 11 – h, m = 60 – m.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class MirroredClock

{

public:

  string whatTimeIsIt(string time)

  {

    char temp[10];

    int h,m;

    sscanf(time.c_str(),"%d:%d",&h,&m);

    if (!m) h = 12 - h;

    else

      h = 11 - h, m = 60 - m;

    sprintf(temp,"%02d:%02d",h%12,m);

    return (string)temp;

  }

};