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

Ответы 1

  • Крутить это все в уме - чистое наказание. Проще было написать программу.// 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Иллюстрация первых пяти шагов приведена во вложении.
    answer img
    • Автор:

      alba82
    • 6 лет назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years