Найти угол между стрелками часов - C (СИ)
Формулировка задачи:
Условие:
Я попробовал что-то написать:
Однако программа проходит все тесты, кроме одного
Где ошибка?
Ограничение времени: 1 с
Ограничение памяти: 1 M
На стандартном потоке ввода задается время (в двадцатичетырехчасовом формате) в виде двух целых чисел: часов и минут. Часовая стрелка перемещается по циферблату непрерывно, то есть в 14:00 она находится ровно на делении 2, а в 14:30 находится посередине между делениями 2 и 3. Определите и напечатайте на стандартный поток вывода угол (в градусах) от часовой стрелки до минутной. Угол должен быть в интервале [-180;180), положительным направлением вращения часовой стрелки считается направление по часовой стрелке.
Для вывода ответа используйте спецификацию преобразования %.10f. Ваш ответ будет сравниваться с правильным ответом как числа с плавающей точкой с точностью 1e-5.
Примеры
Входные данные Результат работы
14 0 | -60.0000000000
14 30 | 105.0000000000
Язык: gcc - GNU C 4.9.1
#include <stdio.h> #include <math.h> int main(void) { double h, m, angle; if ( scanf("%lf %lf", &h, &m) > 0 ) { if (h >= 12) h -= 12; angle = fabs(30*(h + m/60) - 6*m); if (angle > 180) angle = 360 - angle; if (5*(h + m/60) > m) angle *= -1; printf("%.10f", angle); } return 0; }
Решение задачи: «Найти угол между стрелками часов»
textual
Листинг программы
int main(void) { double h, m, angle; if ( scanf("%lf %lf", &h, &m) > 0 ) { if(h>=12) h-=12; angle = 6*m - 30*(h + m/60); if (angle > 180) angle-=360; if (angle < -180) angle+=360; printf("%.10f", angle); } return 0; }
Объяснение кода листинга программы
- Ввод значений времени в переменные h и m с помощью функции scanf.
- Если ввод корректен, то выполняется блок кода.
- Переменная h приводится к диапазону от 0 до 11 (12 часов вычитаются из значения).
- Вычисляется значение переменной angle как 6 умножить на значение переменной m, делённое на 60, и вычитается 30, умноженное на сумму значения переменной h и m делённое на 60.
- Если значение переменной angle больше 180, то оно вычитается из 360.
- Если значение переменной angle меньше -180, то оно прибавляется к 360.
- Выводится значение переменной angle с точностью до 10 знаков после запятой.
- Если ввод некорректен, то программа завершается и возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д