• Предмет: Информатика
  • Автор: dashenkavorobyova
  • Вопрос задан 3 года назад

на с++ пожалуйста
Циклические башни
На дорогах Ханоя было введено одностороннее круговое движение, поэтому теперь диск со стержня 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: спасибо огромное
Вас заинтересует