Помогите с задачкой про Ханойские башни плииз Расписать порядок ходов для перекладывания...

0 голосов
51 просмотров

Помогите с задачкой про Ханойские башни плииз
Расписать порядок ходов для перекладывания 5 дисков со второго стержня на третий.
Если что, 31 ход всего.


Информатика (62 баллов) | 51 просмотров
0

Можно каждый ход нарисовать, а не описывать?))

0

ну да)

0

Выложить больше четырёх картинок нельзя((

Дан 1 ответ
0 голосов
Правильный ответ
Крутить это все в уме - чистое наказание. Проще было написать программу.

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

type
  Pinnacle=record
    St:Stack;
    No:integer;
  constructor (n:integer);
  begin
    St:=new Stack;
    No:=n
  end;
end;
 
var
  MoveNo:integer;

procedure MoveDisk(s1,s2:Pinnacle);
begin
  if s1.St.Count>0 then begin
    MoveNo+=1;
    s2.St.Push(s1.St.Pop);
    Writeln(MoveNo:3,': №',s2.St.Peek,' ',s1.No,' -> ',s2.No)
    end
end;
   
procedure MovePinnacle(n:integer; s1,s2,s3:Pinnacle);
begin
  if n=0 then exit;
  MovePinnacle(n-1,s1,s3,s2);
  MoveDisk(s1,s2);
  MovePinnacle(n-1,s3,s2,s1);
end;

begin
  var n:=5;
  var p1:=new Pinnacle(1);
  var p2:=new Pinnacle(2);
  var p3:=new Pinnacle(3);
  Range(n,1,-1).ForEach(i->p2.St.Push(i));
  MoveNo:=0;
  MovePinnacle(n,p2,p3,p1);
end.

Результат работы
  1: №1 2 -> 3
  2: №2 2 -> 1
  3: №1 3 -> 1
  4: №3 2 -> 3
  5: №1 1 -> 2
  6: №2 1 -> 3
  7: №1 2 -> 3
  8: №4 2 -> 1
  9: №1 3 -> 1
 10: №2 3 -> 2
 11: №1 1 -> 2
 12: №3 3 -> 1
 13: №1 2 -> 3
 14: №2 2 -> 1
 15: №1 3 -> 1
 16: №5 2 -> 3
 17: №1 1 -> 2
 18: №2 1 -> 3
 19: №1 2 -> 3
 20: №3 1 -> 2
 21: №1 3 -> 1
 22: №2 3 -> 2
 23: №1 1 -> 2
 24: №4 1 -> 3
 25: №1 2 -> 3
 26: №2 2 -> 1
 27: №1 3 -> 1
 28: №3 2 -> 3
 29: №1 1 -> 2
 30: №2 1 -> 3
 31: №1 2 -> 3

Иллюстрация первых пяти шагов приведена во вложении.

image
(150k баллов)