Постановка задачи
Часы с боем пробивают каждый час такое количество ударов, сколько их есть на циферблате с цифрами от 1 до 12, и по одному разу тогда, когда минутная стрелка указывает на цифру 6. Зная начальное и конечное время в рамках одних календарных суток (выраженное в часах и минутах), подсчитать общее количество ударов на этом промежутке времени.
Алгоритм решения
Заведем переменную, которая будет отвечать за количество пробитых ударов. Если в начальное время минутная стрелка указывает на число 12, то увеличиваем значение нашей переменной на такое число, на которое указывает часовая стрелка, если же в начальное время минутная стрелка указывает на число 6, то увеличиваем значение переменной на 1. Увеличиваем начальное время на 1 минуту. Повторяем, пока начальное время не будет совпадать с конечным.
Тесты
Входные данные | Выходные данные | |
Начальное время | Конечное время | Количество ударов |
13:30 | 15:10 | 7 |
0:00 | 23:59 | 180 |
12:30 | 12:30 | 1 |
22:08 | 22:22 | 0 |
Реализация
ideone: ссылка
Засчитаное решение на e-olymp: ссылка
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> using namespace std; int main() { int h1, m1, h2, m2, result = 0; cin >> h1 >> m1 >> h2 >> m2; while(true) { if(m1 == 0) { result += h1 > 12 ? h1 - 12 : h1 == 0 ? 12 : h1; } else if(m1 == 30) { result++; } if(h1 == h2 && m1 == m2) { break; } m1++; if(m1 == 60) { m1 = 0; h1++; } } cout << result << endl; return 0; } |
Задача на циклы и решена с использованием циклов. Конечно зачтено.
Но есть вопрос — а существует решение без циклов?
Ладно, раз никто не отвечает, отвечу сам. Существует.