Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 14:01   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Ханойские башни

У Дейтлов есть задача:


Не могу до конца сформулировать алгоритм.

Предположим, я беру 3 колышка и 4 диска
Код:
int k1, k2, k3; //колышки 1, 2 и 3 соответственно

int d1, d2, d3, d4; //диски 1, 2, 3 и 4 соответственно
Если бы на колышке был только один диск, то можно было бы написать
Код:
k3 = d1;
Но как мне записать, что с самого начала на колышек №1 надето четыре диска в последовательности сверху вниз 1, 2, 3 и 4?
fs444 вне форума Ответить с цитированием
Старый 28.03.2010, 14:20   #2
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Это здесь вообще не нужно. Код примерно такой:
Код:
void Hanoi(int count, int from, int to, int odd)
{
  if (count > 1) Hanoi(count-1, from, odd, to);
  Write(from -> to);
  if (count > 1) Hanoi(count-1, odd, to, from);
};
Вызываем Hanoi(n, 1, 3, 2). Вроде так.

З.Ы.: На Вики есть уже готовая программа, кстати

Последний раз редактировалось k1r1ch; 28.03.2010 в 14:24.
k1r1ch вне форума Ответить с цитированием
Старый 28.03.2010, 14:27   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

По сути номер промежуточного колышка даже можно не передавать, это 6 - from - to.

Последний раз редактировалось Somebody; 28.03.2010 в 14:30.
Somebody вне форума Ответить с цитированием
Старый 29.03.2010, 18:59   #4
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

ПАРЕНЬ ТЫ КОГДА перестанешь своими дейтлами развлекать форум?!
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 29.03.2010, 19:04   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

RoS, я учу С++. Тебя что-то не устраивает?
fs444 вне форума Ответить с цитированием
Старый 29.03.2010, 20:08   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
я учу С++
Эта задача на составление алгоритма, а не на изучение определенного ЯП.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 29.03.2010, 20:12   #7
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Может тебе скинуть задачи которые я прорешал у Дейтлов, не все конечно но половина точно есть (с 1 по 6 главу)
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 29.03.2010, 21:14   #8
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

да правда ты бы хоть попытался своими словами задачу описать. Покрайней мере я часто так делаю и мне становится понятно.
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 30.03.2010, 09:27   #9
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию

Оченб хорошо видно алгоритм решения и довольно простой код решения этой задачки на Wiki: http://ru.wikipedia.org/wiki/Ханойская_башня

Код:
// Ханойские башни
#include <iostream>
 
using namespace std;
 
void hanoi_towers(int quantity, int from, int to, int buf_peg)	//quantity-число колец, from-начальное положение колец(1-3),to-конечное положение колец(1-3)
{								//buf_peg - промежуточный колышек(1-3)
	if (quantity != 0)
	{
		hanoi_towers(quantity-1, from, buf_peg, to);
 
		cout << from << " -> " << to << endl;
 
		hanoi_towers(quantity-1, buf_peg, to, from);
	}
}
 
int main()
{
        setlocale(LC_ALL,"rus");
	int start_peg, destination_peg, buffer_peg, plate_quantity;
	cout << "Номер первого столбика:" << endl;
	cin  >> start_peg;
	cout << "Номер конечного столбика:" << endl;
	cin  >> destination_peg;
	cout << "Номер промежуточного столбика:" << endl;
	cin  >> buffer_peg;
	cout << "Количество дисков:" << endl;
	cin  >> plate_quantity;
 
	hanoi_towers(plate_quantity, start_peg, destination_peg, buffer_peg);
return 0;
}
yugik вне форума Ответить с цитированием
Старый 30.03.2010, 15:03   #10
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Я бы не сказал что ето простой код !!! А если для тебя так хотя бы объясни как тут всё работает!!!
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хаонские башни. Nelson1992 Фриланс 3 17.02.2010 19:05
Игра. Ханойские башни. Мышка. MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 1 07.12.2009 15:46
Ханойские башни.С++ nN1 Помощь студентам 1 09.11.2009 19:51
Ханойские башни Vistar Паскаль, Turbo Pascal, PascalABC.NET 2 23.05.2009 02:05
Ханойские башни с рандомным расположением колец fordil Помощь студентам 0 09.12.2008 22:19