Steine verrücken

Neue Frage »

Auf diesen Beitrag antworten »
H4wk Steine verrücken

Es gebe drei Positionen, Position 1, Position 2, Position 3. Auf Position 1 seien
n kreisscheibenförmige Steine übereinandergestapelt. Dabei sind diese Steine nach ihrem Durchmesser sortiert, wobei der Stein mit dem größtem Durchmesser unten liegt. Die anderen beiden Positionen seien leer. Die Steine dürfen verlegt werden. Allerdings muss darauf geachtet werden, dass in jeder Position die Größenreihenfolge eingehalten wird. Es darf also niemals ein kleinerer Stein unter einem größeren sein.

Nun sollen alle Steine von Position 1 nach Position 3 gebracht werden. Ausgegeben werden sollen die einzelnen Verrückungen der Steine.
Kann mir jemand einen Tipp geben, wie ich das in C++ programmieren kann?
 
Auf diesen Beitrag antworten »
David1979 RE: Steine verrücken

Hallo H4wk,

dass, was du mit Steine verrücken meinst ist unter dem Begriff Die Türme von Hanoi bekannt. Ohne großartig viel rumzureden hier der Link zur Wikipediaseite, da ist von der Geschichte bis zur algorithmischen Umsetzung alles haarklein erklärt. Fall du nach dem Durchlesen immer noch Verständnisprobleme haben solltest, meld dich! Wink

Gruß, David
Auf diesen Beitrag antworten »
H4wk

Erstmal Danke, der Name dieses Problems und der Wikipedialink haben mir schon sehr geholfen.
Jetzt stellt sich mir allerdings ein C++ Problem:
Wie kann ich, wenn ich ein Integer Array habe
als Voraussetzung benutzen, dass alle Werte den selben Wert haben müssen?
Genauer gesagt, kann ich irgendwie eine Schleife schreiben, die sich so lange wiederholt bis, in meinem Fall alle Stellen des Array den Wert 2 haben?
Auf diesen Beitrag antworten »
David1979

Hallo H4wk,

eine Schleife in C++ ist nach folgender Syntax aufgebaut:

code:
1:
2:
3:
4:
5:
for (<Initialisierung>;<Bedingung>;<Reinitialisierung>) { 
    Anweisung_1;
    ...
    Anweisung_n; 
}


Dabei kannst du bei der For-Schleife im Initialisierungsteil alle Startbedingungen für deine Variablen festlegen. Zum Beispiel kannst du dort einen Zähler definieren. Dieser Teil wird nur einmal ausgeführt. Anschließend wird die Bedingung geprüft. Die Schleife wird anschließend so oft durchlaufen, wie die Bedingung den Wahrheitswert true (bzw. einen Wert > 0) zurückliefert. Nach jedem Schleifendurchlauf wird der Teil ausgeführtl, der mit Reinitialisierung gekennzeichnet ist. Hier kann man beispielsweise dein Zähler um 1 erhöhen. Dann wird bei der Bedingungsprüfung weiter gemacht.

Als kleines Beispiel, dass alle Zahlen von 0 bis 10 ausgibt:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
#include <iostream.h>

void main(void) {
    int counter;
    for (counter = 0; counter <= 10; counter++) {
        cout << "Zaehler : " << counter << "\n"; 
    }
}


Du müsstest das untere Beispiel nun so umformen, dass über die Länge des Arrays iteriert wird und jedem Feld des Arrays der Wert 2 zugewiesen wird.

Gruß. David
 
Auf diesen Beitrag antworten »
H4wk

Danke, ich habs hingekriegt smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »