Heim >Computer-Tutorials >Computerwissen >Wie schreibe ich ein C-Sprachprogramm, um das Problem des Turms von Hanoi zu lösen?

Wie schreibe ich ein C-Sprachprogramm, um das Problem des Turms von Hanoi zu lösen?

PHPz
PHPznach vorne
2024-01-05 20:18:24960Durchsuche

Wie schreibe ich ein C-Sprachprogramm für das Tower-of-Hanoi-Problem

Tatsächlich gibt es drei Hauptschritte:

Verschieben Sie zunächst die n-1 Scheiben von a nach b bis c.

Zweitens verschieben Sie die untere Scheibe von a nach c.

Drittens: Da sich die ersten n-1-Platten alle auf Säule B befinden, müssen wir nur Säule B als Säule A behandeln und die obigen Schritte wiederholen.

#include

Lassen Sie uns herausfinden, wie Sie das Rätsel lösen können. Während des Puzzles können wir eine Funktion verwenden, um die Platte zu bewegen. Der Prototyp der Funktion ist „void move(int n, char a, char b, char c)“. Innerhalb der Funktion können wir rekursive Methoden verwenden, um die Platte zu bewegen. Indem wir die Anzahl der Platten n und die Kennungen der drei Säulen a, b, c angeben, können wir die Platten der Reihe nach von Säule a zu Säule c verschieben. Die Idee der Rekursion

{

if(n==1)

printf("t%c->%cn", a, c); // Wenn nur eine Platte vorhanden ist, verschieben Sie die Platte direkt von a nach c

sonst

{

Um Spielern zu helfen, die das Level noch nicht bestanden haben, lernen wir die spezifischen Methoden zum Lösen von Rätseln kennen. Beim Lösen von Rätseln können wir rekursive Methoden verwenden. Die spezifischen Operationen sind wie folgt: 1. Verschieben Sie die n-1te Platte von Säule a zu Säule c: move(n-1, a, c, b); 2. Verschieben Sie die n-te Platte von Säule a zu Säule b; 3. Platzieren Sie n

Um Spielern zu helfen, die das Rätsel noch nicht gelöst haben, können wir den folgenden Code verwenden, um das Problem zu lösen: printf("t%c->%cn",a,c);

Um Spielern zu helfen, die dieses Level noch nicht bestanden haben, werfen wir einen Blick auf die spezifischen Schritte zur Lösung des Rätsels. Zuerst können wir die ersten n-1 Platten von Säule B nach Säule A verschieben, sodass Säule B zur Startsäule wird, und dann die Platten auf Säule B über Säule A nach Säule C verschieben.

}

}

int main()

{

int n;

printf („Bitte geben Sie die Anzahl der zu verschiebenden Blöcke ein:“);

scanf("%d",&n);

move(n,'a','b','c');

return 0;

}

Kompilieren Sie ein Tower of Hanoi-Spiel in C-Sprache

Ich habe es erst gestern gemacht.

#include

void hanoi(int n,char one,char two,char three);

void main() { int m; printf("Bitte geben Sie die Anzahl der Stockwerke des Turms ein:"); scanf("%d",&m); printf("Bitte folgen Sie diesen Schritten: n"); hanoi(m,'1','2','3'); }

void hanoi(int n,char one,char two,char three) { void move(char x,char y); if(n==1) move(one, three); else { hanoi(n-1,one); ,drei,zwei); move(eins,drei); hanoi(n-1,zwei,eins,drei);

Ich werde Ihnen eine einfache Bewegungsfunktion vorstellen, die Ihnen bei der Durchführung von Bewegungsoperationen im Spiel helfen kann. Die Funktion ist wie folgt: void move(char x, char y) { printf("%c--->%cn", x, y); } Diese Funktion akzeptiert zwei Parameter, die die aktuelle Position und die Zielposition darstellen. Der Bewegungsvorgang wird ausgedruckt, sodass Sie den Bewegungspfad verfolgen können. Sie können diese Funktion aufrufen, um bei Bedarf Bewegungsvorgänge auszuführen. Ich hoffe, diese Funktion kann Ihnen helfen, das Level zu bestehen!

So programmieren Sie Arhat Tower in C-Sprache

Die Kommentare können Sie hier lesen:

Mein Programm ist unten:

Unten finden Sie eine Funktion, die Ihnen beim Lösen des Rätsels hilft. Sie kann verwendet werden, um den oberen Unterblock von einem Turm zum anderen zu bewegen. „C++ void NuoYiWei(int FromTa, int ToTa) { //Schreiben Sie hier Ihren Code, um den oberen Unterblock von FromTa nach ToTa zu verschieben. } „ Sie können auf der Grundlage dieser Funktion arbeiten und Ihre Rätsellösungsmethode entsprechend spezifischer Spielregeln und Rätselanforderungen schreiben. Denken Sie daran, sich an der Realität zu orientieren

{

TopPoint[FromTa] ist ein Array, das die Höhe jeder Turmebene aufzeichnet. Wenn ein Element von einem Turm entfernt wird, verringert sich die Höhe des Turms um eine Einheit. Der Zweck dieses Arrays besteht darin, uns dabei zu helfen, die aktuelle Höhe jedes Turms im Auge zu behalten.

Um dieses Problem zu lösen, können wir den folgenden Code verwenden, um die Daten von drei Türmen aufzuzeichnen und die Daten von einem Turm zum anderen zu verschieben: „Python DuiZhan[ToTa][TopPoint[ToTa]] = DuiZhan[FromTa][TopPoint[FromTa]] „ Diese Codezeile übernimmt die Daten von der Spitze des bewegten Turms (FromTa) und überträgt sie an die Spitze des bewegten Turms (ToTa). Auf diese Weise können wir Daten auf dem Turm protokollieren und verschieben.

DuiZhan[FromTa][TopPoint[FromTa]] = 0; //Stellen Sie die oberste Ebene des ursprünglichen Turms wieder her, sodass sie leer ist. Werfen wir nun einen Blick auf die spezifischen Rätsellösungsmethoden, um den Spielern zu helfen, die das Level noch nicht bestanden haben.

Um den Spielern zu helfen, die das Level noch nicht bestanden haben, lernen wir die spezifischen Methoden zum Lösen von Rätseln kennen. Einer der wichtigsten Schritte besteht darin, den Turm an die Zielposition zu bewegen. Die spezifische Operation besteht darin, die Anzahl der Stockwerke des Zielturms durch den Code „TopPoint[ToTa]++;“ zu erhöhen. Dieser Schritt ist ein wichtiger Teil des Rätsellösungsprozesses und ich hoffe, dass er allen dabei hilft, das Level reibungslos zu meistern.

}

Die Funktion

void Nuo(int FromTa, int MidTa, int ToTa, int NeedMove) ist die Hauptlösung für das Turm-von-Hanoi-Problem. Wir können diese Funktion verwenden, um das Problem des Turms von Hanoi zu lösen, wenn die Anfangsbedingungen und die Höhe des Turms gegeben sind.

{

Werfen wir einen Blick auf die spezifischen Methoden zum Lösen von Rätseln? Wenn die Höhe des Turms, der verschoben werden muss, größer oder gleich 2 Stockwerke ist, können wir die folgenden Vorgänge durchführen:

{

Nuo(FromTa, ToTa, MidTa, (NeedMove-1)); //Verschieben Sie zuerst die N-1 oberen außer dem unteren zum mittleren Turm. Dieser Schritt wird durch rekursiven Aufruf der Funktion erreicht. Während des Rätsels müssen wir drei Türme (FromTa, ToTa und MidTa) verwenden, um die Platten zu bewegen. Zuerst verschieben wir die oberen N-1 Platten von FromTa nach MidTa (umgesetzt durch rekursiven Aufruf der Funktion). Bewegen Sie dann die Bodenplatte von FromTa nach ToTa. Verschieben Sie abschließend die N-1-Platten von MidTa nach ToTa (ebenfalls rekursiv angepasst

).

NuoYiWei(FromTa,ToTa); //Bewege die Bodenplatte vom Startturm zum Zielturm.

Nuo(MidTa,FromTa,ToTa,(NeedMove-1)); // Verschieben Sie abschließend alle N-1-Elemente, die zum mittleren Turm verschoben wurden, zum Zielturm (vorausgesetzt, diese Funktion kann diese Funktion erreichen)

}

sonst

{

Um Spielern zu helfen, die das Level noch nicht bestanden haben, lernen wir die spezifischen Methoden zum Lösen von Rätseln kennen. Wenn nur noch ein Block übrig ist, der verschoben werden muss, verschieben Sie ihn einfach.

}

}

Diese Funktion ist in C++ geschrieben. Bitte beachten Sie, dass Sie bei Verwendung der C-Sprache auf einige Details achten müssen.

Ich habe ein Tower of Hanoi-Programm, das in der Sprache C geschrieben ist. Wenn Sie es benötigen, können Sie mir eine E-Mail an sxt9840210@163.com senden und klar erklären, welche Art von Programm Sie benötigen.

Wie schreibe ich ein C-Sprachprogramm, um das Problem des Turms von Hanoi zu lösen?

Tower of Hanoi C-Sprachalgorithmus

Ich habe zuvor die Antwort einer anderen Person gespeichert, schau mal:

Die Kernidee des rekursiven Algorithmus besteht darin, das Lösungsziel als Ausgangspunkt zu verwenden und schrittweise einen eigenen Lösungsprozess aufzurufen, um die unbekannten Elemente zu lösen, bis die Grenze der Rekursion erreicht ist, die die Anfangsbedingung darstellt. Diese Methode unterscheidet sich von der herkömmlichen Methode, bei der von den Anfangsbedingungen ausgegangen wird, sie ist jedoch eine der wirksamsten Methoden zur Lösung des Problems. Durch rekursive Algorithmen können wir komplexe Probleme schrittweise in einfache Unterprobleme zerlegen und schließlich die globale Antwort erhalten. Der Schlüssel zur Rekursion besteht darin, die Rekursionsgrenze zu klären und sicherzustellen, dass der rekursive Prozess korrekt sein kann

Der Schlüssel zur Lösung des Turmproblems von Hanoi besteht darin, die Bewegungsregeln zu analysieren, Muster zu finden und Randbedingungen zu bestimmen.

Wenn Sie n Platten von A nach C verschieben möchten, können Sie die folgenden Schritte ausführen: (1) Verschieben Sie n-1 Platten von A nach B; (3) Verschieben Sie n -1 Teller von B bis C. Durch den rekursiven Aufruf der Funktion können sich andere Platten auf A gemäß den oben genannten drei Schritten weiter bewegen, bis die Randbedingung n=1 erreicht ist. Auf diese Weise kann die Aufgabe erfolgreich abgeschlossen werden! Ich hoffe, dass diese Rätselmethode für Spieler hilfreich sein kann, die das Level noch nicht bestanden haben.

Wenn Ihr Denken klar ist, wird das Programm leichter zu verstehen. Im Programm besteht der Schlüssel darin, die Parameter bei jedem Aufruf der Bewegungsfunktion und die Beziehung zwischen den Türmen A, B und C zu analysieren. Lassen Sie uns dies anhand eines praktischen Beispiels unten veranschaulichen.

Um Spielern zu helfen, die das Rätsel noch nicht gelöst haben, schauen wir uns die Lösung genauer an. Erstens können wir die Funktion „move(int n, int x, int y, int z)“ verwenden, um Verschiebungsoperationen durchzuführen.

②{

③ wenn (n==1)

Um Spielern zu helfen, die das Level noch nicht bestanden haben, lernen wir die spezifischen Methoden zum Lösen von Rätseln kennen. Folgende Schritte habe ich für Sie vorbereitet: 1. Suchen Sie zunächst eine Funktion namens printf. 2. Geben Sie dann „%c-->%cn“ in die Klammern der printf-Funktion ein, die zwei Zeichen druckt und die Zeile umbricht. 3. Übergeben Sie in den Klammern x und z als Argumente an die printf-Funktion.

⑤ sonst

⑥ {

⑦ move(n-1,x,z,y);

Um den Spielern beim Bestehen des Levels zu helfen, werfen wir einen Blick auf die spezifischen Methoden zum Lösen von Rätseln. Im Code gibt es eine Codezeile mit dem Namen „printf(“%c-->%cn“,x,z);“. Die Funktion dieser Codezeile besteht darin, die Beziehung zwischen Zeichen x und Zeichen z auszudrucken. Durch die Betrachtung der gedruckten Ergebnisse können wir einige Hinweise erhalten, die uns bei der Lösung des Rätsels helfen.

⑨ {getchar();}//Ist dieser Satz notwendig? Ich habe das Gefühl, dass es entfernt werden kann

⑩ move(n-1,y,x,z);

}

}

Zum Beispiel gibt es 4 Teller, und jetzt werden sie alle auf Turm A platziert. Der Radius der Platten ist entsprechend den Zahlen 1, 2, 3 und 4 größer. Verschieben Sie nun die 4 Platten nach C und ordnen Sie sie in der ursprünglichen Reihenfolge an. Zunächst überlegen wir, wie wir Nr. 4 nach C verschieben können. Wir müssen B als Vermittler verwenden und zuerst die oben genannten drei nach B verschieben. Die Funktionsweise dieses Schritts besteht darin, dass ① im Programm beginnt, die Bewegungsfunktion aufzurufen (der erste Aufruf wird jetzt natürlich als n = 4 aufgezeichnet, und dann wird beurteilt, dass ③n! = 1 ist, also ist ④ nicht). ausgeführt, aber ⑤ wird erneut aufgerufen (als zwei markiert). Überlegen Sie, wie Sie 3 Festplatten nach B verschieben. Dies ist ein rekursiver Aufruf, also kehren wir wieder zu ① zurück und beginnen mit dem Aufruf der Verschiebungsfunktion, aber die entsprechenden Parameter haben sich geändert, da wir dieses Mal nicht darüber nachdenken müssen, 4 Festplatten von A nach C zu verschieben, sondern wie wir von A verschieben. Verschiebe 3 Scheiben nach B. Da n = 3 ist, kann es nicht direkt verschoben werden und erfordert die Hilfe von C als Vermittler. Betrachten Sie zunächst die Methode zum Verschieben von zwei nach C, gehen Sie also zu ⑤ und rufen Sie die Verschiebefunktion erneut rekursiv auf (markiert als drei). Ebenso können zwei Festplatten nicht direkt von A nach C verschoben werden, daher muss der Vorgang des Verschiebens von 1 nach B unter Verwendung von B als Vermittler in Betracht gezogen werden. Diesmal nutzt es B als Vermittler und wechselt zu C als Zweck. Rufen Sie als nächstes die Bewegungsfunktion erneut rekursiv auf (markiert als vier), was bedeutet, dass Sie zu B wechseln, was direkt erfolgen kann. Das Programm führt die Sätze ③ und ④ aus. Das Programm springt aus dem innersten Aufruf (d. h. aus dem vierten Aufruf) und kehrt zum vorherigen zurück (zum dritten Mal) und fährt vom dritten Aufruf nach unten mit der Verschiebefunktion fort , also ⑧, also 2 Die Zahl wurde nach C verschoben und dann weiter nach unten bis

⑩, und verschieben Sie dann diejenige, die nach B verschoben wurde, zurück nach C und kehren Sie so zur zweiten Rekursion zurück (der Zeit, als 3 Festplatten mit C als Vermittler nach B verschoben wurden). Führen Sie ⑧ aus, verschieben Sie die dritte Festplatte von A nach B und geben Sie dann ⑩ ein. Da bei diesem Aufruf die beiden Festplatten auf C mit A als Vermittler nach B verschoben werden, ist ein weiterer rekursiver Aufruf erforderlich, der der Parameterübertragung entspricht Es wird klar analysiert, wer der ursprüngliche Turm, wer der Zielturm und wer der Zwischenturm ist. Der Vorgang ähnelt der obigen Analyse und wird hier nicht wiederholt.

Das obige ist der detaillierte Inhalt vonWie schreibe ich ein C-Sprachprogramm, um das Problem des Turms von Hanoi zu lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:docexcel.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen