Крутить это все в уме - чистое наказание. Проще было написать программу.// PascalABC.NET 3.2, сборка 1417 от 28.03.2017// Внимание! Если программа не работает, обновите версию!type Pinnacle=record St:Stack<integer>; No:integer; constructor (n:integer); begin St:=new Stack<integer>; 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) endend; 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
Иллюстрация первых пяти шагов приведена во вложении.