Число минут когда часовая и минутная стрелки совпадут - C (СИ)
Формулировка задачи:
Помогите найти ошибку/причину в коде (условия задачи ниже), не проходят 2 теста (скрин во вложении)
На вход программе подаются два целых числа, указывающие момент времени "n часов m минут". Определите наименьшее число полных минут, которое должно пройти до того момента, когда часовая и минутная стрелки ни циферблате совпадут, не обязательно на каком-то делении. Вещественную арифметику не использовать.
Примеры
Входные данные 2 50
Выходные данные 26
Входные данные 3 0
Выходные данные 16
#include <stdio.h>
#define hour 60
#define circle 720
int main(int argc, char *argv[])
{
int h;
int m;
scanf("%d",&h);
scanf("%d",&m);
int t = 60 * (h % 12) + m % 60;
int x = (m==h*5) ? 0:(circle*((t/(circle/11))+1)/11 - t);
printf("%d\n", x);
return 0;
}Решение задачи: «Число минут когда часовая и минутная стрелки совпадут»
textual
Листинг программы
int dm=(60*h+m)/12-m<0?60:0;
printf("%d\n",(60*h-11*m+12*dm)/11);
Объяснение кода листинга программы
- Переменная
hсодержит количество часов, прошедших с начала суток (от 0 до 23). - Переменная
mсодержит количество минут, прошедших с начала суток (от 0 до 59). - Переменная
dmиспользуется для хранения остатка от деления (60h+m)/12 на 11. Присваивается значение (60h-11m+12dm)/11. - Вывод на экран значения переменной
dm. - Значение переменной
dmвычисляется следующим образом: (60*h+m)/12-m<0?60:0. - В знаменателе 12, т.к. в одном часе 12 заведений по 60 минут.
- Значение переменной
dmсдвигается на 60, если результат (60*h+m)/12-m отрицательный. - Результат (60*h+m)/12-m делится на 11.
- Если результат (60*h+m)/12-m отрицательный, то к нему добавляется 60.
- Результат (60*h+m)/12-m выводится на экран.