Крутить это все в уме - чистое наказание. Проще было написать программу.
// 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) 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.
100
Объяснение:
массив то отсортирован