Znajdź wszystkie unikalne obroty liczby. Obrót liczby w lewo oznacza przeniesienie cyfry jedności na początek liczby. Można również obrócić w drugą stronę przenosząc pierwszą cyfrę na koniec. Dodatkową zaletą rozwiązania będzie posortowany wynik końcowy.
Przykładowo obracają liczbę 123 w prawo otrzymamy kolejno 123, 312, 231, 123 itd., a w lewo byłoby odwrotnie tj. 123, 231, 312, 123, itd. Jeśli w liczbie występuje powtarzający się wzór cyfr np. liczba 1818 to ma ona tylko dwa unikalne obroty: 1818, 8181. Na podstawie tego łatwo zauważyć, że ilość unikalnych wyników w wyniku obrotu jest równa najdłuższej, niepowtarzącej się części liczby. Dla liczb złożonej z jednej cyfry tylko ona jest unikalnym obrotem.
Poniższy algorytm znajduje zbiór wszystkich unikalnych obrotów liczby dla podanej liczby a. Algorytm wykorzystuje obrót w prawo.
Algorytm początkowo określa z ilu cyfr składa się podana liczba oraz mnożnik mn, który zostanie wykorzystany do przekładania cyfry jedności na początek. Następnie w pętli przesuwamy tyle razy z ilu cyfr składa się liczba. Wszystkie znalezione wartości dorzucamy do zbioru wynikowego. Wykorzystują odpowiednią strukturę danych na koniec zwracana jest lista unikalnych obrotów. Dodatkowo jest ona posortowana.
Poniższy fragment kodu może wczytać od użytkownika liczbę, a następnie wypisać dla niej wszystkie unikalne obroty:
Napisz algorytm do znajdowania wszystkich obrotów liczby wykorzystując obrót w lewo. Przykładowo dla liczby 123 kolejno powinny zostać wypisane: