//
#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
============================================