я написал вот такой код на python:

def create_disks(n):
    a = [i for i in range(n,0,-1)] # первый стержень, заполненный полностью по правилам игры
    return a

n = int(input("Сколько дисков:"))

a = create_disks(n)    
b = [0 for i in a] # второй стержень
c = [i for i in b] # третий стержень, цель игры — перетащить на него все диски из первого стержня
    

#показать стержни
def show_rods():
    print(a)
    print(b)
    print(c)
    print()
    print('#########')
    print()
    
#выбор самого верхнего диска
def disk_select(listr):
    for rod in range((len(listr))-1,-1,-1): #обратный for stmnt
        if listr[rod] != 0:
            disk = listr[rod]
            listr[rod] = 0 # стирание диска оттуда, откуда он был взят
            break
    return disk
    
def disk_move(move_from,move_to):
    disk = disk_select(move_from) # объявление самого верхнего диска
    for rod in range(0,(len(move_to))): #обратный for stmnt
        if move_to[rod] == 0:
            move_to.pop(rod)
            move_to.insert(rod,disk) # 2. Вставка на место первого элемента нужного диска
            break
    
    show_rods()

show_rods()

def hanoi(disk, from_, to, buffer_):
    if disk == 1:
        disk_move(from_,to)
        return
    
    hanoi(disk-1,from_,buffer_,to);
    disk_move(from_,to)
    hanoi(disk-1, buffer_, to, from_);

hanoi(n,a,c,b)


и потом решил перенести его на c++ и у меня получилось это

#include <iostream>

using namespace std;

void show_rods(int a[],int b[],int c[],int size)
{
    for ( int i = 0; i < size; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
    
    for ( int i = 0; i < size; i++)
    {
        cout << b[i] << " ";
    }
    cout << endl;
    
    for ( int i = 0; i < size; i++)
    {
        cout << c[i] << " ";
    }
    cout << endl;
    cout << endl;
}

void display(int a[],int size)
{
    for ( int i = 0; i < size; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}

int* create_ar(int size)
{
    int* a = new int[size];

    for (int j = size - 1; j >= 0; j--)
    {
        a[j] = size - j;
    }

    return a;
}

int disk_select(int a[],int size)
{
    int disk;
    for (int i = size - 1; i >= 0; i--)
    {
        if (a[i] != 0)
        {
            disk = a[i];
            a[i] = 0;
            break;
        }
    }
    return disk;
}

void disk_move(int move_from[], int move_to[],int size)
{
    int disk = disk_select(move_from,size);
    
    for (int i = 0; i < size; i++)
    {
        if (move_to[i] == 0)
        {
            move_to[i] = disk;
            break;
        }
    }
}

void hanoi(int disk,int from[],int to[], int buffer[],int size)
{
    if (disk == 1)
    {
        disk_move(from,to,size);
        show_rods(from,buffer,to,size);
        return;
    }

    hanoi(disk-1,from,buffer,to,size);
    show_rods(from,buffer,to,size);
    disk_move(from,to,size);

    hanoi(disk-1, buffer, to, from,size);
}

int main()
{
    int size;
    cout << "Enter the number of disks: ";
    cin >> size;
    
    cout << endl;
    
    int* a = create_ar(size);
    int b[size];  
    int c[size];
    
    for (int i = 0; i < size;i++)
    {
        b[i] = 0;
        c[i] = 0;
    }

    hanoi(size,a,c,b,size);
    
    return 0;
}


У меня он получился не очень верным в плане вывода ходов, перенеси код на язык программирования также, как и я пытался это сделать