Задачи
Одно перекладывание Ханойских башен
Одно перекладывание Ханойских башен
Здесь мы рассмотрим классическую задачу о Ханойских башнях. В ней имеются три стержня и набор круглых дисков. Пусть количество дисков равно \textbf{n}. Диски имеют разный размер, никакие два из которых не имеют одинаковый радиус. Основное правило состоит в том, что запрещено класть больший диск на меньший. Пронумеруем диски с \textbf{1} (наименьший) до \textbf{n} (наибольший), стержни будем именовать \textbf{A}, \textbf{B} и \textbf{C}. Изначально все диски расположены на стержне \textbf{A}. Цель задачи состоит в перенесении их на стержень \textbf{C}, последовательно перекладывая их один за одним, никогда не кладя больший диск на меньший. Существует хорошо известное решение, которое рекурсивно перемещает \textbf{n--1} диск с \textbf{A} на \textbf{B}, потом перемещает один диск с \textbf{A} на \textbf{C}, после чего рекурсивно перемещает \textbf{n -- 1} диск с \textbf{B} на \textbf{C}.
Псевдокод рекурсивного решения задачи о Ханойских башнях имеет вид:
\textbf{move(num_disks, from_post, spare_post, to_post)}
\textbf{if (num_disks == 0)}
\textbf{return}
\textbf{move(num_disks -- 1, from_post, to_post, spare_post)}
\textbf{print ("Move disk ", num_disks, " from ", from_post, " to ", to_post)}
\textbf{move(num_disks -- 1, spare_post, from_post, to_post)}
В этой задаче необходимо определить \textbf{k}-тое перекладывание по заданным \textbf{k} и \textbf{n}.
\InputFile
Каждая строка содержит два целых числа \textbf{k} и \textbf{n}. В конце входных данных расположена строка из двух нулей. Входные значения корректны, \textbf{k }и \textbf{n} - положительные целые числа, \textbf{k} меньше \textbf{2^n}, поэтому \textbf{k}-тое перекладывание существует, \textbf{n} не более \textbf{60}, поэтому ответ помещается в \textbf{64}-битовый целочисленный тип.
\OutputFile
Вывести требуемое \textbf{k}-тое перекладывание, совершенное алгоритмом. Формат вывода должен быть следующим: "\textbf{Case}", один пробел, номер теста, двоеточие, один пробел, и ответ для текущего теста в формате: номер диска, имя стержня \textbf{from_post} и имя стержня \textbf{to_post}, разделяя их одним пробелом. Пробелы в конце строки не выводить.
Входные данные #1
1 3 5 3 8 4 0 0
Выходные данные #1
Case 1: 1 A C Case 2: 1 B A Case 3: 4 A C