//

#include < iostream.h>
#include < stdlib.h>

int UeberNr3 ;     // Anzahl der über dem drittgrößten Ring liegenden Ringe
int PosNr3 = 1 ;   // aktueller Stab des drittgrößten Rings

int PosKleinster = 1 ;    // aktueller Stab des kleinsten Rings
int ZuegeKleinster = 0 ;  // soviel Züge hat der kleinste Ring bislang gemacht

int iterationszaehler = 0 ; // Gesamtzahl der Züge
int modul ;                 // Jeder modulte-te Zug wird ausgegeben

// -------------------------------------------------------------

void move ( int start, int ziel )
{
    if (((++iterationszaehler)%modul)==0)
       cout << "                     " << iterationszaehler\
            << ": " << " " << start << " -> " << ziel << "\n" ;

    if ((UeberNr3==0) && (start==PosNr3))
    {
       PosNr3 = ziel ;
       cout << iterationszaehler << ": " << start << " -> " << ziel << "\n" ;
    }
    else
    {
       if (ziel==PosNr3)
          UeberNr3++ ;
       else
          if (start==PosNr3) UeberNr3-- ;
    }
    if (PosKleinster==start)
    {
       PosKleinster=ziel ;
       ZuegeKleinster++ ;
    }
}

// -------------------------------------------------------------

int hanoi ( int n, int stick1, int stick2, int stick3 )
{

   if (n==1)
   {
      move( stick1, stick2 ) ;
      return 1 ;
   }
   else
   {  int a ;

      a = hanoi( n-1 , stick1, stick3, stick2 ) ;
      move( stick1, stick2 ) ;
      a += 1 + hanoi( n-1 , stick3, stick2, stick1 ) ;
      return a ;
   }
}

// -------------------------------------------------------------

int main(int argc, char* argv[])
{
   int n = atoi(argv[1]) ;
   int gesamt; 

   modul = atoi(argv[2]) ;

   UeberNr3 = n-3 ;

   cout << "\nDie Züge des         Jeder " << modul <<"-te Zug\n" ;
   cout << "Drittgrößten\n\n" ;

   gesamt = hanoi(n , 1, 2, 3 ) ;

   cout << "\n\nAnzahl der Zuege des Kleinsten: "<< ZuegeKleinster << "\n" ;
   cout << "Gesamtzahl der Zuege:           "<< gesamt << "\n" ;
   cout << "============================================\n\n" ;
}

// ---------------------------------------------------------------------


Ausgabe für n=5:


Die Züge des         Jeder 10-te Zug
Drittgrößten

4: 1 -> 2
                     10:  2 -> 1
12: 2 -> 3
                     20:  3 -> 1
20: 3 -> 1
28: 1 -> 2
                     30:  3 -> 2


Anzahl der Zuege des Kleinsten: 16
Gesamtzahl der Zuege:           31
============================================

Ausgabe für n=10:

Die Züge des         Jeder 100-te Zug
Drittgrößten

                     100:  1 -> 3
128: 1 -> 2
                     200:  1 -> 2
                     300:  3 -> 2
384: 2 -> 3
                     400:  1 -> 3
                     500:  2 -> 1
                     600:  2 -> 3
640: 3 -> 1
                     700:  1 -> 3
                     800:  1 -> 2
896: 1 -> 2
                     900:  3 -> 2
                     1000:  3 -> 1


Anzahl der Zuege des Kleinsten: 512
Gesamtzahl der Zuege:           1023
============================================