Задача
Алиса любит свой цифровой будильник. Она устанавливает его каждый вечер. Прошлой ночью Алисе приснились ее часы. К сожалению, единственное, что она помнит — так это количество отображаемых сегментов на часах. Алиса хочет узнать, какое время показывали ее часы во сне.
Часы Алисы содержат четыре цифры: две для часов и две для минут. Например, часы ниже показывают [latex]9[/latex]:[latex]30[/latex] (ведущий ноль высвечивается).
Часы имеют следующее представление цифр:
Входные данные
Одно целое число [latex]n (0≤ n ≤30)[/latex] — количество подсвеченных сегментов на часах Алисы во сне.
Выходные данные
Вывести пять символов в формате [latex]hh:mm[/latex] — время, показываемое часами Алисы во сне. Время должно быть корректным: [latex]0 ≤ hh < 24[/latex] and [latex]0 ≤ mm < 60[/latex]. Если существует несколько решений, то вывести любое. Если решения не существует, то вывести [latex]Impossible[/latex].
Тесты
Входные данные | Выходные данные |
---|---|
23 | 00:02 |
28 | Impossible |
0 | Impossible |
15 | 01:12 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> using namespace std; int main() { int n; while (cin >> n) { int seg[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; for (int i = 0; i < 24; i++) for (int j = 0; j < 60; j++) { int a = 0; a = a + seg[i / 10]; a = a + seg[i % 10]; a = a + seg[j / 10]; a = a + seg[j % 10]; if (a == n) { if (i < 10) cout << '0' << i; else cout << i; cout << ':'; if (j < 10) cout << '0' << j; else cout << j; return 0; } } cout << "Impossible"; } } |
Решение
Перебираем i и j (от 0 до 24 и 60 соответственно). a=seg[i/10] (для десятков) и a=seg[i%10] (для остальных чисел) то же самое делаем для j. Тем самым, мы перебираем все возможные варианты количества сегментов. Если a==n (количество сегментов) при переборе и в входных данных совпадает, то выводим наше время и выходим из цикла. Если же при переборе не было такого же числа сегментов, как в входных данных, то решения нет и мы, соответственно, выводим [latex]Impossible[/latex].
Почему вы выделили только случай $n=0$, а остальные, например, $n=30$?
Цикл while можно было не использовать, добавив return 0; нескольких местах.
Поясню.
— Сроки 6-9 лишние.
— Строки 5 и 10 должны выглядеть как одна — while(cin >> n) {.
— Строки 30 и 31 нужны, чтобы выйти из обоих вложенных циклов. В данном случае делаем просто return 0;.
— Строки 34 и 36 уже лишние, если Вы учтете предыдущую рекомендацию.
— И, конечно, переменная q теперь не нужна.