Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: помоги-те... сделать прогр."Ханойские башни" Добавлено: 06.05.03 22:51  

Автор вопроса:  Vally | ICQ: 167219792 

     имеются 3 колышка A B C и n дисков разного размера, пронумированные от 1 до n в порядке возрастания их размеров. Сначала все диски одеты на колышек A в виде пирамиды. Надо перенести все диски с колышка A  на B, при этом диски можно переносить по одному, диск большего размера нельзя ставить на меньший, C  используется в качестве промежуточного

 

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 aka



Вопросов: 2
Ответов: 60
 Web-сайт: hotmix.narod.ru
 Профиль | | #1
Добавлено: 07.05.03 06:14

???

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 07.05.03 18:37

Это как уто играшка на мотороле?! Если я правильно понял.

Чо там её писать?! Сам поседи подумай - это легко!

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 08.05.03 05:11

Я этим тоже раньше интересовался. Вот алогритм на Паскале:

Игра "Ханойская башня" состоит в следующем. Есть три стержня. Hа первый из них надета пирамидка из N колец (большие кольца снизу, меньшие сверху). Требуется переместить кольца на другой стержень. Разрешается перекладывать кольца со стержня на стержень, но класть большее кольцо поверх меньшего нельзя. Составить программу, указывающую требуемые действия.

Hапишем рекурсивную процедуру перемещения M верхних колец с A-го стержня на B-ый в предположении, что остальные кольца больше по размеру и лежат на стержнях без движения:

    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;

Сначала переносится пирамидка из M-1 колец на третий стержень C. После этого M-ое кольцо освобождается, и его можно перенести на B. Остается перенести пирамиду из N-1 кольца с C на B. Чем это проще первоначальной задачи? Тем, что количество колец стало на единицу меньше. Теперь основную программу можно записать в несколько строк:

    program Hanoi;
      var N:integer;
      procedure Move(M,A,B:integer);
                .............

			Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам