Zuhause Persönliche Finanzen Java Programming Challenge: Die Türme von Hanoi rekrutieren - Dummies

Java Programming Challenge: Die Türme von Hanoi rekrutieren - Dummies

Video: #09 Java Tutorial: Rekursion 2024

Video: #09 Java Tutorial: Rekursion 2024
Anonim

Diese Herausforderung hilft Ihnen, Ihre Programmiertalente zu nutzen, um ein Java-Programm zu schreiben, das die erforderlichen Schritte zur Lösung eines Towers of Hanoi-Rätsels unter Berücksichtigung der Anzahl der Festplatten ausgibt.

Die Türme von Hanoi ist ein klassisches Logikrätsel, das aus drei vertikalen Stiften und einer Anzahl von Scheiben unterschiedlicher Durchmesser besteht. Jede Scheibe hat ein Loch in der Mitte, so dass die Scheiben über die Stifte geschoben werden können.

Das Puzzle beginnt mit allen auf einem der Stifte gestapelten Scheiben, wobei die größte Scheibe unten und die kleinste oben ist. Das Ziel des Puzzles ist es, den Stapel von Platten zu einem der anderen Pfosten zu bewegen, wobei nur zwei einfache Regeln beachtet werden: (1) Sie können jeweils nur eine Scheibe bewegen, und (2) Sie können niemals eine größere Scheibe aufbringen. Spitze eines kleineren.

Die folgende Abbildung zeigt die Lösung für einen Stapel von drei Festplatten. Wie Sie sehen können, erfordert die Lösung sieben Züge:

  1. Verschieben Sie die Diskette 1 von Peg 1 auf Peg 3.

  2. Verschieben Sie Disk 2 von Peg 1 auf Peg 2.

  3. Verschieben Sie Disk 1 von Peg 3 auf Peg 2.

  4. Bewegen Sie Disk 3 von Peg 1 zu Peg 3.

  5. Bewegen Sie Disk 1 von Peg 2 auf Peg 1.

  6. Bewegen Sie Disk 2 von Peg 2 auf Peg 3.

  7. Verschiebe die Diskette 1 von Peg 1 zu Peg 3.

Nach diesen sieben Schritten befindet sich der Diskettenstapel auf Peg 3.

Die Lösung für die Türme von Hanoi puzzle mit drei Festplatten.

Das Puzzle wird interessant, wenn Sie anfangen, der Startposition Scheiben hinzuzufügen. Bei drei Scheiben benötigt das Rätsel nur 7 Züge zum Lösen. Bei vier Platten sind 15 Züge erforderlich. Bei fünf Scheiben benötigst du 31 Züge. Sechs Festplatten benötigen 64 Züge.

Wenn Sie der Mathematik gefolgt sind, erhöht sich die Anzahl der Bewegungen, die erforderlich sind, um das Puzzle zu lösen, exponentiell, wenn die Anzahl der Scheiben zunimmt. Genauer gesagt beträgt die Anzahl der Bewegungen, die erforderlich sind, um n Festplatten zu bewegen, 2 n - 1. Beispielsweise benötigt ein Stapel von 20 Festplatten 2 20 - 1 Zug; Das sind mehr als eine Million Züge! Eine interessante Legende ist mit dem Rätsel verbunden: In einem Tempel in Hanoi arbeiten Mönche seit der Erschaffung der Erde an einem Türme von Hanoi-Puzzle mit 64 Scheiben. Wenn sie fertig sind, wird die Welt ein Ende finden. Zum Glück haben wir eine lange Zeit zu warten: Wenn die Mönche eine Scheibe pro Sekunde bewegen können, wird es weitere 580 Milliarden Jahre dauern, bis sie das Rätsel gelöst haben.

Ihre Herausforderung ist einfach: Schreiben Sie ein Java-Programm, das die Schritte ausgibt, die zur Lösung eines Towers of Hanoi-Rätsels erforderlich sind, wenn die Anzahl der Festplatten angegeben wird. Das Programm sollte den Benutzer zunächst nach der Anzahl der Datenträger fragen. Dann sollte es die Schritte anzeigen, eine pro Zeile.Jeder Schritt sollte angeben, von welchem ​​Stift eine Platte verschoben werden soll und von welchem ​​Stift die Platte verschoben werden soll. Die Schritte sollten auch fortlaufend nummeriert werden.

Nach Abschluss des Vorgangs sollte das Programm wiederholt werden und den Benutzer erneut nach der Anzahl der Laufwerke fragen. Das Programm sollte beendet werden, wenn der Benutzer 0 eingibt.

Hier ist ein Beispiel für die Konsolenausgabe, die Ihr Programm generieren soll:

Wie viele Festplatten? (0 bis Ende)

3 1: 1 bis 3 2: 1 bis 2 3: 3 bis 2 4: 1 bis 3 5: 2 bis 1 6: 2 bis 3 7: 1 bis 3 Wie viele Festplatten ? (0 bis Ende) 0 Die einzige andere Anforderung zum Lösen dieser Herausforderung ist, dass Ihre Lösung rekursive Programmierung verwenden muss. Mit anderen Worten muss Ihre Lösung eine Methode enthalten, die sich selbst anruft, um das Rätsel zu lösen.

Rekursive Programmierung kann eine Herausforderung sein. Hier sind einige Hinweise zur Lösung dieses Rätsels:

Das Puzzle besteht aus drei Pegs. Einer von ihnen enthält den Startstapel von Platten; nennen Sie diesen Peg den

  • Quellpeg . Einer der verbleibenden zwei Stifte ist der Stift, zu dem Sie den Stapel von Platten verschieben möchten. nennen Sie diesen Stift den Zielstift . Der dritte Pflock steht Ihnen als Zwischenstop zur Verfügung, um Festplatten vorübergehend zu speichern, während Sie sie bewegen. Rufen Sie diesen Stift den Ersatzstift auf. Ihre rekursive Methode sollte drei Parameter akzeptieren: die Anzahl der zu verschiebenden Festplatten, die Quell-Peg und die Ziel-Peg. Verwenden Sie die Integer-Werte 1, 2 und 3, um die Pegs darzustellen.

  • Die Grundidee, das Puzzle rekursiv zu lösen, ist folgende: Um einen Stapel von Datenträgern von einem Quellpflock zu einem Zielpflock zu bewegen, sind drei Schritte erforderlich:

  • Verschieben Sie alle Festplatten mit Ausnahme des unteren Datenträgers Ersatzstöpsel.

    1. Bewegen Sie die größte Festplatte des ursprünglichen Stapels auf die Zielposition.

    2. Bewegt den Stapel, den Sie in Schritt 1 verschoben haben, vom Ersatzpflock zum Zielpflock.

    3. Natürlich können Sie mit den Rätselregeln nur jeweils eine Platte verschieben, also können Sie die Schritte 1 und 3 der hier angegebenen Prozedur nicht ausführen, indem Sie einfach den Stapel aufheben und verschieben. An dieser Stelle kommt die Rekursion ins Spiel. Bei den Schritten 1 und 3 rufen Sie die Methode rekursiv auf, indem Sie jedes Mal eine zu verschiebende Festplatte angeben und jedes Mal die vorherige Zielpunkt-Bindung als Reservepeg verwenden.

  • Sie fragen sich, warum die rekursive Methode die Ersatzbindung nicht als Argument akzeptieren muss? Weil Sie es leicht berechnen können, gegeben die Quellen- und Zielstöpsel. Da es nur drei Heringe gibt, die mit 1, 2 und 3 nummeriert sind, ist die Summe der drei Heringe 6 (1 + 2 + 3). Anhand der Quell- und Ziel-Pegs können Sie die Ersatz-Peg berechnen, indem Sie die Quell- und Ziel-Peg von 6 subtrahieren. Wenn beispielsweise die Quell-Peg 1 und die Ziel-Peg 3 ist, muss der Ersatz-Peg 2 sein, weil

  • 6 - 3 - 1 = 2.

    Wechseln Sie für die Lösung zur Registerkarte Downloads auf der Produktseite

Java All-in-One für Dummies, 4th Edition. Viel Glück!

Java Programming Challenge: Die Türme von Hanoi rekrutieren - Dummies

Die Wahl des Herausgebers

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Schneller Foto-Bearbeitungsmodus ist eine abgespeckte Version des Modus "Full Photo Edit", der einfach grundlegende Fixingtools bereitstellt und mit einigen einzigartigen Funktionen aufwartet, z. B. eine Vorher-Nachher-Vorschau Ihres Bildes. Hier ist ein Schritt-für-Schritt-Workflow, den Sie im Schnellfoto-Bearbeitungsmodus verwenden können, um Ihre Fotos zu reparieren:

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Fotoeffekte in Photoshop Elements 11 funktionieren wie Anwenden von Filtern; Das Dialogfeld "Filtergalerie" bietet Ihnen zahlreiche Optionen zum Anwenden eines Filters. Das geführte Bedienfeld bietet Ihnen Filtereffekte und führt Sie dann durch die Schritte zum Anpassen von Helligkeitswerte, Ändern von Farbton und Sättigung und Durchführen weiterer Anpassungen zum Vervollkommnen des Ergebnisses. Sie ...

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Absatztyp in Photoshop Elements 11 ist ähnlich zu dem Text, den Sie in ein Textverarbeitungsprogramm eingeben, mit der Ausnahme, dass er in einem Textfeld oder einem Begrenzungsrahmen enthalten ist. Wenn Sie größere Textabschnitte haben, die Sie in ein Bild eingeben möchten, ist die Eingabe des Textes als Absatztyp die praktischste Option. Während ...

Die Wahl des Herausgebers

PHP-Anweisungen - Dummys

PHP-Anweisungen - Dummys

PHP ist eine Skriptsprache, die speziell für die Verwendung im Internet entwickelt wurde. Es enthält Funktionen, die Sie bei der Programmierung der Aufgaben unterstützen, die für die Entwicklung dynamischer Webanwendungen erforderlich sind. Diese Tabelle gibt einen kurzen Überblick über einige der Anweisungen, die Sie häufig verwenden werden: Anweisung Beschreibung array ("key" => "value", ...); Casts a ...

PHP-Schablonen-Systeme - Schablonen-Systeme

PHP-Schablonen-Systeme - Schablonen-Systeme

Können die Menge an Arbeit reduzieren, die Sie für die Erstellung einer Website in PHP benötigen. Wenn Sie eine Website erstellen, verwenden Sie häufig das gleiche Layout für die gesamte Website. Sie haben eine obere Portion, vielleicht mit einem Menü; ein Hauptinhaltsbereich; und ein unterer Teil, vielleicht mit Links oder ...

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Die ALTER Query wird verwendet, um die Struktur von eine MySQL-Datenbank. In dieser Liste wird die Syntax für die Änderungen angezeigt, die Sie wahrscheinlich vornehmen möchten: ADD-Spaltenbezeichnung ALTER-Spaltenname SET-DEFAULT-Wert ALTER-Spaltenname DROP DEFAULT CHANGE-Spaltenname newcolname-Definition DROP-Spaltenname MODIFY-Spaltenname RENAME newtablename

Die Wahl des Herausgebers

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Mit NoSQL haben Sie Hochgeschwindigkeits-Caching. Stellen Sie sich vor, Sie sind Bankangestellte und arbeiten mit drei anderen Kollegen zusammen. Jeder hat eine Reihe von Leuten, die bedient werden sollen. Einer der Kunden bleibt jedoch in der Schlange, um zu fragen, ob sein Scheck bereits eingelöst und der Betrag seinem Konto gutgeschrieben wurde. Wenn Sie ...

Wie man Einsichten aus Big Data kommuniziert - Dummies

Wie man Einsichten aus Big Data kommuniziert - Dummies

Big Data kann helfen, Einblicke zu gewinnen. Unternehmen gewinnen Wettbewerbsvorteile, wenn die richtigen Informationen zur richtigen Zeit an die richtigen Leute geliefert werden. Dies bedeutet, Erkenntnisse und Informationen aus Daten zu extrahieren und sie Entscheidungsträgern auf eine Weise zu vermitteln, die sie leicht verstehen. Schließlich sind Menschen weniger wahrscheinlich zu handeln, wenn sie ...

Zookeeper und HBase Reliability - dummies

Zookeeper und HBase Reliability - dummies

Zookeeper ist ein verteiltes Cluster von Servern, das gemeinsam zuverlässige Koordinations- und Synchronisationsdienste für Cluster-Anwendungen bereitstellt. .. Zugegeben, der Name "Zookeeper" mag auf den ersten Blick eine seltsame Wahl sein, aber wenn Sie verstehen, was es für einen HBase-Cluster tut, können Sie die Logik dahinter sehen. Beim Erstellen und Debuggen von verteilten Anwendungen ...