Uzupełnij podaną funkcję w taki sposób, aby rozwiązywała ona problem Wież Hanoi za pomocą rekurencji. Dodaj również zapisywanie, ile krążków jest na poszczególnych słupkach w trakcie każdego wykonania funkcji. Krążki początkowo znajdują się na słupku A i mają docelowo zostać przeniesione na słupek C.
Przykład: jeżeli krążek zdejmujemy ze słupka A i umieszczamy na słupku C, wówczas zmienną krazkiNaA powinniśmy zmniejszyć o 1, a krazkiNaC zwiększyć o 1.
Swoje rozwiązanie przetestuj dla 5 krążków: n = 5.
Specyfikacja problemu:
Dane:
n – liczba krążków w grze, liczba naturalna
Wynik:
Program, na standardowym wyjściu, w kolejnych liniach wypisuje, ile krążków jest na poszczególnych słupkach w każdym kroku wykonania funkcji. Wartości na kolejnych słupkach powinny zostać oddzielone pojedynczym znakiem odstępu.
R1CEO04rvmiq8
Przykładowe rozwiązanie zadania:
Linia 1. public class Main otwórz nawias klamrowy.
Linia 2. public static int n znak równości 5 średnik.
Linia 3. public static int krazkiNaA znak równości n średnik.
Linia 4. public static int krazkiNaB znak równości 0 średnik.
Linia 5. public static int krazkiNaC znak równości 0 średnik.
Linia 6. public static void hanoi otwórz nawias okrągły int n przecinek char A przecinek char B przecinek char C zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. if otwórz nawias okrągły n zamknij nawias ostrokątny 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. hanoi otwórz nawias okrągły n minus 1 przecinek A przecinek C przecinek B zamknij nawias okrągły średnik.
Linia 9. System kropka out kropka println otwórz nawias okrągły String kropka format otwórz nawias okrągły cudzysłów procent d procent d procent d cudzysłów przecinek krazkiNaA przecinek krazkiNaB przecinek krazkiNaC zamknij nawias okrągły zamknij nawias okrągły średnik.
Linia 10. if otwórz nawias okrągły A znak równości znak równości apostrof A apostrof zamknij nawias okrągły krazkiNaA minus minus średnik.
Linia 11. if otwórz nawias okrągły A znak równości znak równości apostrof B apostrof zamknij nawias okrągły krazkiNaB minus minus średnik.
Linia 12. if otwórz nawias okrągły A znak równości znak równości apostrof C apostrof zamknij nawias okrągły krazkiNaC minus minus średnik.
Linia 13. if otwórz nawias okrągły C znak równości znak równości apostrof A apostrof zamknij nawias okrągły krazkiNaA plus plus średnik.
Linia 14. if otwórz nawias okrągły C znak równości znak równości apostrof B apostrof zamknij nawias okrągły krazkiNaB plus plus średnik.
Linia 15. if otwórz nawias okrągły C znak równości znak równości apostrof C apostrof zamknij nawias okrągły krazkiNaC plus plus średnik.
Linia 16. hanoi otwórz nawias okrągły n minus 1 przecinek B przecinek A przecinek C zamknij nawias okrągły średnik.
Linia 17. zamknij nawias klamrowy.
Linia 18. zamknij nawias klamrowy.
Linia 20. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 21. hanoi otwórz nawias okrągły krazkiNaA przecinek apostrof A apostrof przecinek apostrof B apostrof przecinek apostrof C apostrof zamknij nawias okrągły średnik.
Linia 22. System kropka out kropka println otwórz nawias okrągły String kropka format otwórz nawias okrągły cudzysłów procent d procent d procent d cudzysłów przecinek krazkiNaA przecinek krazkiNaB przecinek krazkiNaC zamknij nawias okrągły zamknij nawias okrągły średnik.
Linia 23. zamknij nawias klamrowy.
Linia 24. zamknij nawias klamrowy.
31
Ćwiczenie 2
Uzupełnij podany kod tak, aby rozwiązywał zagadkę Wież Hanoi. Dodatkowo program powinien wyświetlać liczbę przesunięć krążków potrzebnych do rozwiązania tej zagadki dla n krążków. Swoje rozwiązanie przetestuj dla 11 krążków.
Specyfikacja problemu:
Dane:
n – liczba krążków, liczba naturalna
Wynik:
Program, na standardowym wyjściu, wypisuje liczbę przesunięć krążków potrzebnych do rozwiązania zagadki Wież Hanoi.
R1KDF2Us84tag
Przykładowe rozwiązanie zadania:
Linia 1. public class Main.
Linia 2. otwórz nawias klamrowy.
Linia 3. static int licznik znak równości 0 średnik.
Linia 5. public static void hanoi otwórz nawias okrągły int n przecinek char A przecinek char B przecinek char C zamknij nawias okrągły.
Linia 6. otwórz nawias klamrowy.
Linia 7. if otwórz nawias okrągły n zamknij nawias ostrokątny 0 zamknij nawias okrągły.
Linia 8. otwórz nawias klamrowy.
Linia 9. hanoi otwórz nawias okrągły n minus 1 przecinek A przecinek C przecinek B zamknij nawias okrągły średnik.
Linia 10. licznik plus plus średnik.
Linia 11. hanoi otwórz nawias okrągły n minus 1 przecinek B przecinek A przecinek C zamknij nawias okrągły średnik.
Linia 12. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy.
Linia 14. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły.
Linia 15. otwórz nawias klamrowy.
Linia 16. int n znak równości 11 średnik.
Linia 17. hanoi otwórz nawias okrągły n przecinek apostrof A apostrof przecinek apostrof B apostrof przecinek apostrof C apostrof zamknij nawias okrągły średnik.
Linia 18. System kropka out kropka println otwórz nawias okrągły licznik zamknij nawias okrągły średnik.
Linia 19. zamknij nawias klamrowy.
Linia 20. zamknij nawias klamrowy.