Sa consideram
3 tije (notate A, B,
C). Pe tija A
se afla n discuri de k
dimensiuni distincte d1>d2>...>dk.
Mai exact, exista m1
discuri de diametru d1,
m2 discuri de diametru
d2, ..., mk
discuri de diametru dk.
Evident, m1+m2+...+mk=n.
Discurile sunt asezate initial pe tija A
în ordinea descrescatoare a dimensiunilor, privind de la baza spre vârf
(deci la baza sunt cele m1
discuri de diametru d1,
apoi urmeaza cele m2
discuri de diametru d2,
...).
La o mutare se poate deplasa un singur disc de pe o tija pe alta, dar niciodata
nu va fi plasat un disc de diamentru mai mare peste un disc cu diametru mai
mic.
Scopul este de a muta toate discurile de pe tija A
pe tija B, respectând permanent
ordinea descrescatoare a dimensiunilor.
Tija C poate fi folosita ca tija
de manevra.
Cerinta
Scrieti un program care sa determine numarul minim de mutari care trebuie sa fie executate pentru a deplasa cele n discuri de pe tija A pe tija B.
Date de intrare
Fisierul de intrare hanoig.in contine pe prima linie numarul natural k, cu semnificatia din enunt. Pe cea de a doua linie se afla k numere naturale separate prin câte un spatiu m1 m2 ... mk.
Date de iesire
Fisierul de iesire hanoig.out va contine o singura linie pe care va fi scris numarul minim de mutari care trebuie sa fie executate pentru a deplasa cele n=m1+m2+...+mk discuri de pe tija A pe tija B.
Restrictii si precizari
hanoig.in | hanoig.out |
2 |
8 |
Timp maxim de executie/test: 0.1 secunde
prof. Emanuela
Cerchez
Liceul de Informatica
"Grigore Moisil" Iasi
Contact:emanuela.cerchez@gmail.com