Страница: 1 |
имеются 3 колышка A B C и n дисков разного размера, пронумированные от 1 до n в порядке возрастания их размеров. Сначала все диски одеты на колышек A в виде пирамиды. Надо перенести все диски с колышка A на B, при этом диски можно переносить по одному, диск большего размера нельзя ставить на меньший, C используется в качестве промежуточного
??? Это как уто играшка на мотороле?! Если я правильно понял. Чо там её писать?! Сам поседи подумай - это легко! Я этим тоже раньше интересовался. Вот алогритм на Паскале: Игра "Ханойская башня" состоит в следующем. Есть три стержня. Hа первый из них надета пирамидка из N колец (большие кольца снизу, меньшие сверху). Требуется переместить кольца на другой стержень. Разрешается перекладывать кольца со стержня на стержень, но класть большее кольцо поверх меньшего нельзя. Составить программу, указывающую требуемые действия. Hапишем рекурсивную процедуру перемещения M верхних колец с A-го стержня на B-ый в предположении, что остальные кольца больше по размеру и лежат на стержнях без движения: Сначала переносится пирамидка из M-1 колец на третий стержень C. После этого M-ое кольцо освобождается, и его можно перенести на B. Остается перенести пирамиду из N-1 кольца с C на B. Чем это проще первоначальной задачи? Тем, что количество колец стало на единицу меньше. Теперь основную программу можно записать в несколько строк:
Вопрос: помоги-те... сделать прогр."Ханойские башни"
Добавлено: 06.05.03 22:51
Автор вопроса: Vally | ICQ: 167219792
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
aka
Вопросов: 2
Ответов: 60
Web-сайт:
Профиль | | #1
Добавлено: 07.05.03 06:14
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 07.05.03 18:37
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 08.05.03 05:11
procedure Move(M,A,B:integer);
var C:integer;
begin
if M=1 then begin writeln ('сделать ход ',A,'->',B) end
else
begin
C:=6-A-B; {C - третий стержень: сумма номеров равна 6}
Move(M-1,A,C);
Move(1,A,B);
Move(M-1,C,B)
end
end;
program
var N:integer;
procedure Move(M,A,B:integer);
.............