Матч
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;
}
};