Предмет: Информатика, автор: dashenkavorobyova

на с++ пожалуйста
Циклические башни
На дорогах Ханоя было введено одностороннее круговое движение, поэтому теперь диск со стержня 1 можно перекладывать только на стержень 2, со стержня 2 — на 3, а со стержня 3 — на 1.

Решите головоломку с учётом этих ограничений. Вам не нужно находить минимальное решение, но количество совершённых перемещений не должно быть больше 200000 при условии, что количество дисков не превосходит 10.

Входные данные

Задано натуральное число n≤10 — размер пирамидки.

Выходные данные

Программа должна вывести способ перекладывания пирамидки из данного числа дисков со стержня 1 на стержень 3.

Примеры
Ввод
Вывод
3
1 1 2
1 2 3
2 1 2
1 3 1
2 2 3
1 1 2
1 2 3
3 1 2
1 3 1
1 1 2
2 3 1
1 2 3
1 3 1
3 2 3
1 1 2
1 2 3
2 1 2
1 3 1
2 2 3
1 1 2
1 2 3


fkid2006: можете прислать?
fkid2006: Вы же понимаете, что сегодня конец)
dashenkavorobyova: ну, я тебе на вопрос твой ответила про возведение в степень. А куда разбитие слагаемых кинуть?
fkid2006: в комменты нельзя, если нет, то я сделаю вопрос
dashenkavorobyova: #include

int d[100][100];

int dec(int n, int k) {

if ( n >= 0 && k >= 0 && d[n][k] > 0 ) return d[n][k];

if ( n < 0 ) return 0;

if ( n <= 1 || k == 1 ) return 1;

d[n][k] = dec(n, k-1) + dec(n-k, k);

return d[n][k];

}

int main() {

int m, i, j;

scanf("%d", &m);

for (i = 0; i < m; i++) {

for (j = 0; j < m; j++) {

d[i][j] = -1;

}

}

printf("%d\n", dec(m, m));

return 0;

}
fkid2006: спасибо
fkid2006: говорит не компилируется
dashenkavorobyova: не знаю, у меня прошло
fkid2006: сможете кинуть сюда?
fkid2006: https://znanija.com/task/43920949

Ответы

Автор ответа: fkid2006
6

Ответ:

#include <iostream>

#include <vector>

using namespace std;

void hanoi(int n, int f, int t) {

   if (n == 0) {

       return;

   }

   int v = 6 - f - t;

   if (f == t - 1 || (f == 3 && t == 1)){

       hanoi(n - 1, f, v);

       cout << n << " " << f << " " << t << endl;

       hanoi(n - 1, v, t);

   }else{

       hanoi(n - 1, f, t);

       cout << n << " " << f << " " << v << endl;

       hanoi(n - 1, t, f);

       cout << n << " " << v << " " << t << endl;

       hanoi(n - 1, f, t);

   }

}

int main (){

   int n;

   cin >> n;

   hanoi(n, 0, 0); //тут какая - то проблема при выводе, я не понял как выводить их. Если вдруг решите проблему, то напишите в комменты под задачей!!  

}

Объяснение:

Мне тоже надо срочно, кто сделал "Быстрое возведение в степень" и

"Количество разбиений на слагаемые" отправьте пж мне решения


dashenkavorobyova: вот, что в конце:
dashenkavorobyova: {
int n ;

cin >> n ;

hanoi(n, 1 ,3);

return 0;
}
fkid2006: спасибо огромное
Похожие вопросы
Предмет: Английский язык, автор: амурск1