Hjem Personlig finansiering Java Programmeringsudfordring: Genopretning af tårnene i Hanoi - dummies

Java Programmeringsudfordring: Genopretning af tårnene i Hanoi - dummies

Video: Java Tutorial for Beginners [2019] 2024

Video: Java Tutorial for Beginners [2019] 2024
Anonim

Denne udfordring hjælper dig med at bruge dine programmeringstalenter til at skrive et Java-program, der vil udskrive de trin, der er nødvendige for at løse et tårn i Hanoi-puslespil i betragtning af antallet af diske.

Hanoi Towers er et klassisk logisk puslespil, der består af tre lodrette pinde og et antal diske med forskellige diametre. Hver disk har et hul i midten, så diskene kan glides over pinnene.

Puslespillet starter med alle de diske stablet på en af ​​pinnene, med den største disk i bunden og den mindste øverst. Formålet med puslespillet er at flytte stakken af ​​diske til en af ​​de andre stifter, og overholde kun to enkle regler: (1) du kan kun flytte en disk ad gangen, og (2) du aldrig kan placere en større disk på toppen af ​​en mindre.

Nedenstående figur viser løsningen for en stak på tre diske. Som du kan se, kræver løsningen syv bevægelser:

  1. Flyt disk 1 fra Peg 1 til Peg 3.

  2. Flyt disk 2 fra Peg 1 til Peg 2.

  3. Flyt Disk 1 fra Peg 3 til Peg 2.

  4. Flyt disk 3 fra Peg 1 til Peg 3.

  5. Flyt disk 1 fra Peg 2 til Peg 1.

  6. Flyt disk 2 fra Peg 2 til Peg 3.

  7. Flyt disk 1 fra Peg 1 til Peg 3.

Efter disse syv trin vil stakken af ​​diske være på Peg 3.

Løsningen til tårnene i Hanoi puslespil med tre diske.

Puslespillet bliver interessant, når du begynder at tilføje diske til startpositionen. Med tre diske kræver puslespillet kun 7 træk til at løse. Med fire diske kræves der 15 træk. Med fem diske skal du bruge 31 bevægelser. Seks diske kræver 64 træk.

Hvis du har fulgt matematikken, øges antallet af bevægelser, der kræves for at løse puslespillet eksponentielt, da antallet af diske stiger. Specifikt er antallet af træk, der kræves for at flytte n diske, 2 n - 1. For eksempel kræver en stak på 20 diske 2 20 - 1 træk; det er mere end en million flytter!

En interessant legende er forbundet med puslespillet: På et tempel i Hanoi har munkene arbejdet på et tårn i Hanoi-puslespil med 64 diske siden jordens skabelse. Når de er færdige, vil verden komme til en ende. Heldigvis har vi lang tid at vente: Hvis munkene kan flytte en disk per sekund, vil det være endnu 580 milliarder år eller deromkring, før de afslutter puslespillet.

Din udfordring er enkel: Skriv et Java-program, der udskriver de nødvendige skridt til at løse et tårn i Hanoi-puslespil i betragtning af antallet af diske. Programmet skal først spørge brugeren for antallet af diske. Så skal det vise trinene, en pr. Linje.Hvert trin skal angive, hvilken pinde der skal flyttes en disk fra, og hvilken peg for at flytte disken til. Trinnene skal også sekventielt nummereres.

Når programmet er færdigt, skal programmet gentage og spørge brugeren om antallet af diske igen. Programmet skal slutte, når brugeren indtaster 0.

Her er en prøve af det konsolprodukt, dit program skal generere:

Hvor mange diske? (0 til slut) 3 1: 1 til 3 2: 1 til 2 3: 3 til 2 4: 1 til 3 5: 2 til 1 6: 2 til 3 7: 1 til 3 Hvor mange diske ? (0 til slut) 0

Det eneste andet krav til løsning af denne udfordring er, at din løsning skal bruge rekursiv programmering. Med andre ord skal din løsning indeholde en metode, der kalder sig til at løse puslespillet.

Rekursiv programmering kan være udfordrende, så her er et par tip til løsningen af ​​dette puslespil:

  • Puslespillet består af tre pinde. En af dem indeholder startstakken af ​​diske; kalder denne peg på kildepen . En af de resterende to pegs er den pinde, du vil flytte stakken af ​​diske til; kalder denne peg på target peg . Den tredje peg er tilgængelig for dig som midlertidig peg til at gemme diske midlertidigt, mens du flytter dem. Kald denne peg på reservedele .

  • Din rekursive metode skal acceptere tre parametre: antallet af diske, der skal flyttes, kildepen og målestiften. Brug heltalværdierne 1, 2 og 3 til at repræsentere stifterne.

  • Grundlæggende ideen om at løse puslespillet rekursivt er dette: For at flytte en stak disketter fra en kildepind til en målstift skal der træffes tre trin:

    1. Flyt alle diske i stakken undtagen bunddisken til reservepeg.

    2. Flyt den største disk i den oprindelige stak til målestiften.

    3. Flyt stakken du flyttede i trin 1 fra reservepenet til målestiften.

  • Selvfølgelig giver puslespilreglerne dig mulighed for kun at flytte en disk ad gangen, så du ikke kan udføre trin 1 og 3 i den procedure, der gives her, ved blot at hente stakken og flytte den. Det er her rekursionen kommer ind. For trin 1 og 3 kalder du metoden rekursivt, hver gang du angiver en færre disk, der skal flyttes, og hver gang du bruger den foregående målsnål som reservepenet.

  • Spekulerer på, hvorfor den rekursive metode ikke behøver at acceptere reservepenet som et argument? Fordi du nemt kan beregne det, givet kilde og mål pegs. Da der kun er tre stifter, nummereret 1, 2 og 3, er summen af ​​de tre stifter 6 (1 + 2 + 3). I betragtning af kilde- og målestifterne kan du beregne reservepenet ved at trække kilde- og målstiftet fra 6. Hvis kildepenet er 1 og målestangen er 3, skal reservepenet være 2, fordi

    6 - 3 - 1 = 2.

For løsningen, gå til fanen Downloads i Java All-in-One for Dummies, 4. udgave produktside.

Held og lykke!

Java Programmeringsudfordring: Genopretning af tårnene i Hanoi - dummies

Valg af editor

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld redigeringsfunktion i Photoshop Elements 10 - dummies

Fuld fotoredigeringsfunktion tilbyder bundter af værktøjer, som du kan bruge at redigere dine billeder, fra korrektionsværktøjer til fastsættelse af farve og klarhed til filtre, lag og meget mere for at ændre eksisterende fotos eller skabe helt originale billeder fra bunden. Men alle disse værktøjer gør også Komplet fotoredigeringstilstand kompleks. Du kan flytte ind i ...

Generelle blandingsformer i Photoshop Elements - dummies

Generelle blandingsformer i Photoshop Elements - dummies

Elementer spænder over 25 blandingstilstande. Blend modes påvirker hvordan farver interagerer mellem lag og også hvordan farver interagerer, når du anvender maling på et lag. Ikke alene gør blandingstilstande interessante effekter, men du kan også nemt anvende, redigere eller fjerne blandingsfunktioner uden at røre dine billedpixel. De forskellige blandingstilstande ...

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriske formindstillinger i Photoshop Elements - dummies

Geometriindstillinger hjælpe med at definere, hvordan dine figurer ser ud. Klik på nedpegepilen i værktøjsindstillingerne i Elements for at få adgang til de geometriske indstillinger, der beskrives i det følgende. Rektangulære og afrundede rektangel geometriske indstillinger Her er geometriske indstillinger for rektangel og afrundede rektangelformer: Ubegrænset: Giver dig mulighed for at få fri tøj til at tegne en ...

Valg af editor

Sådan bygger du tabeller i HTML5 - dummies

Sådan bygger du tabeller i HTML5 - dummies

Sommetider indeholder din webside data bedst fremlagt i et bord . Du kan bruge HTML5's komplette bordsystem til at oprette tabeller som den i dette eksempel: Den grundlæggende struktur i et bord i HTML-format er rimeligt let at forstå; Tjek koden, der oprettede tabellen i eksemplet:

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Hvordan man ændrer gentagne baggrunde på CSS3-steder - dummier

Der er situationer, hvor man kun vil en enkelt kopi af et baggrundsbillede på dit CSS3-websted. Det kan være, at billedet du har brugt er noget, der ikke gentager sig godt eller er stort nok til, at du virkelig ikke vil have det gentaget. Følgende procedure viser en teknik, du kan bruge til at fortælle ...

Hvordan man opbygger en webside skabelon fra scratch-dummies

Hvordan man opbygger en webside skabelon fra scratch-dummies

Standardværktøjet på tværs af digitalt agenturer og interne afdelinger til opbygning af website grafik er Adobe Photoshop. Selvom fyrværkeri er optimeret og målrettet til at producere web-grafiske kildefiler, er det bare ikke fanget, sandsynligvis på grund af den massive genoplæringsindsats ville det medføre, at hele afdelinger gør omskifteren. At oprette et nyt ...

Valg af editor

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Sådan godkendes medlemmer til din LinkedIn Group - dummier

Som flere og flere mennesker finder ud af din ny LinkedIn-gruppe, og som medlemmer begynder at deltage, kan du opleve, at nogle af de personer, der har klikket på linket for at deltage, ikke er på din forhåndsgodkendte liste. Måske er de mennesker, du ikke har forstået var på LinkedIn, eller du var ikke klar over, at de var gyldige grupper ...

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Hvordan man tilføjer billeder til kroppen i din LinkedIn-profil til Visual Social Marketing - dummies

Ud over et profilbillede giver LinkedIn brugere mulighed for at forbedre de visuelle sociale markedsføringselementer i deres profiler ved at tilføje billeder til deres profilprofil. Du kan tilføje billeder til ethvert afsnit i din LinkedIn-profil. Tilføjelse af billeder til din profil kan hjælpe dig med at fortælle din historie visuelt og ...

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

Sådan tilføjer du en virksomhedsside til LinkedIn - dummies

, Når du har opfyldt kravene til oprettelse en virksomhedsside på LinkedIn, er det tid til at komme i gang ved at tilføje selskabets side til Linkedins system. For at oprette din virksomhedsside skal du blot følge disse trin: