Napisz program wyświetlający liczbę ruchów niezbędnych do rozwiązania zagadki wież Hanoi dla k krążków. Twój program powinien wypisać na ekranie liczbę wykonanych ruchów. Przetestuj swój program dla krążków.
Specyfikacja problemu:
Dane:
k – liczba krążków; liczba naturalna
Wynik:
Program wypisuje liczbę ruchów, niezbędnych do rozwiązania zagadki wież Hanoi dla k krążków.
R8JwybhLKSxDi
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Przykładowe rozwiązanie zadania:
Linia 1. def hanoi otwórz nawias okrągły n przecinek a przecinek b przecinek c zamknij nawias okrągły dwukropek.
Linia 2. global zlicz.
Linia 4. if n znak równości znak równości 0 dwukropek.
Linia 5. return None.
Linia 6. if n zamknij nawias ostrokątny 0 dwukropek.
Linia 7. hanoi otwórz nawias okrągły n minus 1 przecinek a przecinek c przecinek b zamknij nawias okrągły.
Linia 8. zlicz plus znak równości 1.
Linia 9. hanoi otwórz nawias okrągły n minus 1 przecinek c przecinek b przecinek a zamknij nawias okrągły.
Linia 11. if n znak równości znak równości k dwukropek.
Linia 12. print otwórz nawias okrągły zlicz zamknij nawias okrągły.
Linia 14. zlicz znak równości 0.
Linia 15. k znak równości 7.
Linia 16. hanoi otwórz nawias okrągły k przecinek cudzysłów A cudzysłów przecinek cudzysłów B cudzysłów przecinek cudzysłów C cudzysłów zamknij nawias okrągły.
def hanoi(n, a, b, c):
global zlicz
if n == 0:
return None
if n > 0:
hanoi(n - 1, a, c, b)
zlicz += 1
hanoi(n - 1, c, b, a)
if n == k:
print(zlicz)
zlicz = 0
k = 7
hanoi(k, "A", "B", "C")
21
Ćwiczenie 2
Napisz program, który będzie wypisywał m-ty ruch, opisujący rozwiązanie Wież Hanoi dla n krążków. Niech odpowiedź będzie w postaci: „Przeniesienie z X do Y”. Przetestuj swój program dla wieży składającej się z ośmiu krążków i wypisz piąty ruch.
Specyfikacja problemu:
Dane:
n – liczba krążków; liczba naturalna
m – numer ruchu, który ma zostać wypisany; liczba naturalna dodatnia,
Wynik:
Program wyświetla m-ty ruch opisujący rozwiązanie zagadki Wież Hanoi dla n krążków.
R1Nco1EebzFI0
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Przykładowe rozwiązanie zadania:
Linia 1. def hanoi otwórz nawias okrągły n przecinek a przecinek b przecinek c zamknij nawias okrągły dwukropek.
Linia 2. global zlicz.
Linia 3. if n zamknij nawias ostrokątny 0 dwukropek.
Linia 4. hanoi otwórz nawias okrągły n minus 1 przecinek a przecinek c przecinek b zamknij nawias okrągły.
Linia 5. zlicz plus znak równości 1.
Linia 6. if zlicz znak równości znak równości m dwukropek.
Linia 7. print otwórz nawias okrągły cudzysłów Przeniesienie z cudzysłów przecinek a przecinek cudzysłów do cudzysłów przecinek c zamknij nawias okrągły.
Linia 8. hanoi otwórz nawias okrągły n minus 1 przecinek b przecinek a przecinek c zamknij nawias okrągły.
Linia 10. zlicz znak równości 0.
Linia 11. n znak równości 8.
Linia 12. m znak równości 5.
Linia 13. hanoi otwórz nawias okrągły n przecinek cudzysłów A cudzysłów przecinek cudzysłów B cudzysłów przecinek cudzysłów C cudzysłów zamknij nawias okrągły.
def hanoi(n, a, b, c):
global zlicz
if n > 0:
hanoi(n - 1, a, c, b)
zlicz += 1
if zlicz == m:
print("Przeniesienie z",a,"do",c)
hanoi(n - 1, b,a,c)
zlicz = 0
n = 8
m = 5
hanoi(n, "A", "B", "C")