Hanoi qüllələri#3989

Hanoi qüllələri

1 saniyə
64 meqabayt
Çox asan

Hər bir proqramçı "Hanoi qüllələri" tapmacasını tanıyır. Qısa olaraq onun şərtini xatırladaq.

3 çubuq var: A, B, C. Əvvəlcə n fərqli diametrli disk A çubuğunda yerləşdirilib: ən kiçik disk yuxarıda, diametri artan şəkildə aşağıya doğru düzülüb. İkinci və üçüncü çubuqlar isə boşdur.

Bütün diskləri A çubuğundan B çubuğuna, C çubuğunu əlavə olaraq istifadə edərək köçürmək lazımdır.

Bir addımda yalnız bir üst diski götürmək və onu ya boş çubuğa, ya da üstündəki diskdən daha böyük diametrə malik olan çubuğa qoymaq icazəlidir.

Demək olar ki, bütün proqramlaşdırma kitablarında məsələnin rekursiv həlli mövcuddur. Məsələn, aşağıda Pascal dilində həll verilmişdir.

Procedure Hanoi (A, B, C: integer; N:integer);

Begin

If N>0 then

Begin

Hanoi (A, C, B, N-1);

Writeln('Disk ', N, ' from ', A, ' to ', B);

Hanoi (C, B, A, N-1)

End

End;

Məlumdur ki, yuxarıda göstərilən həll (2^n–1) addım tələb edir. Başlanğıc yerləşməni nəzərə alaraq, üç çubuqda n diskin yerləşdirilməsi üçün ümumilikdə 2^n kombinasiya mövcuddur. Bəzi kombinasiyalar alqoritmin icrası zamanı heç vaxt rast gəlinmir. Məsələn, "CAB" kombinasiyası n = 3 olduqda oyunda heç vaxt rast gəlinməyəcək (ən kiçik disk C çubuğunda, orta A çubuğunda və ən böyük B çubuğunda yerləşdirilib).

Verilmiş kombinasiyanın oyunda rast gəlinib-gəlinməyəcəyini müəyyən edən proqram yazın.

Giriş

Birinci sətir disk sayını n (1 ≤ n ≤ 250) ehtiva edir. İkinci sətir n böyük hərf ("A", "B" və ya "C") - çubuqlarda n diskin yerləşməsini ehtiva edir. Birinci (ən sol) hərf ən kiçik diskin mövqeyini (çubuğun adını), ikinci hərf ikinci ən kiçik diskin mövqeyini və s. göstərir...

Çıxış

Verilmiş kombinasiyanın oyunda əldə edilə biləcəyinə görə "YES" və ya "NO" yazın.

Nümunələr

Nümunə 1

Loading
Loading