e-olymp 1488. Шахматная головоломка

Задача

prb1488

Борис очень любит различные шахматные головоломки. У него есть младший брат Вова. Борис очень любит задавать простые головоломки Вове, а в награду, если тот их решит, давать ему конфету. Но Вова, к сожалению, не очень любит шахматы, зато любит программирование.

В этот раз Борис задал Вове следующую головоломку: на шахматном поле размером $8 × 8$ клеток стоит одна шахматная фигура — конь. Необходимо расположить на поле еще две шахматные фигуры — ладью и слона, таким образом, чтобы они били коня, но не били друг друга, и конь не бил их. Так как Вова еще не очень силен в программировании, он попросил вас помочь ему с решением данной головоломки.

Напомним, что конь бьет те клетки, которые отстоят от его текущего положения на две клетки по горизонтали и одну клетку по вертикали, или на две клетки по вертикали и одну по горизонтали.

Ладья бьет те клетки, которые находятся на той же горизонтали или вертикали, что и она. Слон бьет те клетки, которые находятся на той же диагонали, что и он.

Входные данные

Первая строка входного файла содержит положение коня в следующем формате. Сначала буква от $a$ до $h$, обозначающая номер столбца в котором находится конь, потом цифра от $1$ до $8$, обозначающая номер строки.

Выходные данные

В первую строку выведите положение ладьи в аналогичном формате, во вторую строку выведите положение слона.

Гарантируется, что требуемая расстановка всегда существует.

Тесты

Ввод Вывод
1 a1 d1
b2
2 h8 e8
g7
3 e5 b5
d4
4 c8 f8
d7
5 h6 e6
g5

Код

Решение

Для решения данной задачи ладью всегда будем размешать на две клетки левее или правее коня, а слона — на одну клетку вниз/вверх по диагонали от него.

Ссылки

Задача 1488 на e-olymp

Код задачи на Ideone

Related Images:

7 thoughts on “e-olymp 1488. Шахматная головоломка

  1. Данное решение неплохо для данной конкретной задачи. Но что будет, если вдруг у нас окажется доска 9х9 или 19х19? Есть ли более общий подход?

    • Тишина…
      Добавлю
      — Вполне достаточно расмотреть четыре базовые ситуации. Фактически можно выбрать одно базовое размещение фигур, например в прямоугольнике 2 х 4 с конем в одной из вершин, и разместить его на доске.
      — Удобнее пользоваться числовыми индексами для обозначения координат. Для буквенных нужно так построить решение, чтобы особым случаем требующим проверки было размещение коня на первой вертикали — ее кордината всегда «A».
      — Лучше не сдвигать вправо если используете else if.

    • Большое спасибо, все исправила.
      Выбрала базовое размещение, но с немного другим особым случаем. Заметила уже потом, это не играет никакой роли.
      Единственное, строки оказались не совсем тут нужны. Если необходимо, я переделаю со строками, но общий случай перестанет работать.

    • Спасибо за замечание. Общий подход действительно есть и я его уже описала.

Добавить комментарий