Найти угол между стрелками часов - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д