Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 199
1

Ханойские башни

21.02.2016, 21:36. Просмотров 500. Ответов 4
Метки нет (Все метки)

Не могу понять где ошибка,проверяла на 3 монетках ,разного достоинства, наложенных друг на друга,на основе этого и составляла код.но выводит не то,подскажите ,что не так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void printMoving(int from, int to)
{
    cout << "move disk form" << from << "to" << to << endl;
}
void Hanoi(int b, int m, int e, int n)
{
    if (n == 1)
    {
        printMoving(b, e);
    }
    else
    {
        Hanoi(e, m, b,n-1);
        printMoving(b, e);
        Hanoi(m, e, b, n - 1);
    }
}
int main()
{
    Hanoi(1, 2, 3, 3);
    system("pause");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2016, 21:36
Ответы с готовыми решениями:

Ханойские башни
Ханойские башни. Алгоритм я приблизительно понимаю, но программу написать не могу... Мне не нужно...

Ханойские башни
Головоломка “Ханойские башни” состоит из трех стержней, пронумерованных числами 1, 2, 3. На...

Ханойские башни
Ребята, помогите разобраться с алгоритмом, то что сначала перемещаются n-1 дисков на...

Ханойские башни
Кто-то из вас может решить адачу о ханойских башнях на си++ рекурсивным способом, а тоя никак не...

Ханойские башни
Уважаемые программисты. Срочно очень нужно рекурсивное решение задачи “Ханойские башни” на С# с...

4
zer0mail
2458 / 2094 / 217
Регистрация: 03.07.2012
Сообщений: 7,591
Записей в блоге: 1
22.02.2016, 00:26 2
Прокомментируй код. Может, тогда сам(а) поймешь
0
Kristina_S
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 199
22.02.2016, 01:27  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void printMoving(int from, int to)
{
    cout << "move disk form" << from << "to" << to << endl;
}
void Hanoi(int b, int m, int e, int n)
{
    if (n == 1)
    {
        printMoving(b, e);
    }
    else
    {
        Hanoi(e, m, b,n-1);
        printMoving(b, e);
        Hanoi(m, e, b, n - 1);
    }
}
int main()
{
    Hanoi(1, 2, 3, 3);
    system("pause");
}
b-begin начальный стержень
m-middle вспомогательный стержень
e-end куда надо переставить
n-кол-во колец
ну,для чаcтного случая все ясно.просто переставляем
а для общего:
13 строка) ставим ставим верхнее кольцо на end а то.что было за ним на middle
14) печатаем
15)то кольцо.что было посередине ставим в начало. то что было в конце на середину
так ли?если нет.пожалуйста покажите на "на пальцах"
извините.что тупенькая(
0
marat_miaki
184 / 164 / 96
Регистрация: 08.04.2013
Сообщений: 675
22.02.2016, 06:42 4
Это рекурсивный алгоритм есть еще без рекурсии
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
 
void t(int r, int b, int e)
{
    int c;
    //12=21
    //13=31
    //23=32
    if (((b==1) && (e==2))  ||
        ((b==2) && (e==1)))
        c=3;
    else    
        
    if (((b==1) && (e==3))  ||
        ((b==3) && (e==1)))
        c=2;
    else        
    if (((b==2) && (e==3))  ||
        ((b==3) && (e==2)))
        c=1;    
        
    if (r>1) 
    {
        
    t(r-1,b,c);
    cout << b << " -> " << e << endl;
        t(r-1,c,e);
    }
    else 
    cout << b << " -> " << e << endl;   
}
 
int main()
{
 t(3,1,3);  
    
}
Добавлено через 14 минут
это подробное объяснение http://uchitel-program.ru/urok-25-rekursiya-hanoyskaya-bashnya/
0
zer0mail
2458 / 2094 / 217
Регистрация: 03.07.2012
Сообщений: 7,591
Записей в блоге: 1
22.02.2016, 07:47 5
Цитата Сообщение от Kristina_S Посмотреть сообщение
а для общего:
13 строка) ставим ставим верхнее кольцо на end а то.что было за ним на middle
14) печатаем
15)то кольцо.что было посередине ставим в начало. то что было в конце на середину
так ли?если нет.пожалуйста покажите на "на пальцах"
извините.что тупенькая(
Если речь идет о нормальных ханойских башнях, то нижнее кольцо большое, а верхнее - маленькое и нельзя класть большее кольцо на меньшее. Поэтому должно быть так:
C++
1
2
3
4
 
      Hanoi(b, e, m, n - 1); // n-1 кольцо переносим на middle
      printMoving(b, e);     // самое большое на end
      Hanoi(m, b, e, n - 1); // n-1 кольцо переносим с middle на самое большое
Добавлено через 6 минут
http://igroflot.ru/logic/flash_game_206/
0
22.02.2016, 07:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2016, 07:47

Ханойские башни
У Дейтлов есть задача: Не могу до конца сформулировать алгоритм. Предположим, я беру 3...

Ханойские башни
Решил задачу о ханойских башнях рекурсивно: void HanBashR(int count, int start, int mid, int...

Ханойские башни
Легенда гласит,что где-то в Ханое находится храм,в котором размещеа следущая конструкция:на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru