Rozważamy ciągi złożone z liczb całkowitych dodatnich. Jeżeli mamy pewien ciąg A, możemy skonstruować drugi ciąg B, będący opisem A, w następujący sposób: każdy fragment A będący p-krotnym powtórzeniem jednej liczby x zamieniamy na dwie liczby p i x w ciągu B.
Przykład: ciąg (1, 1, 3, 2, 2, 2, 1) to „dwie jedynki, jedna trójka, trzy dwójki i jedna jedynka”, a więc jego opis to (2, 1, 1, 3, 3, 2, 1, 1). Z kolei ciąg (2, 2, 2, 2, 5, 3, 3) to kolejno „cztery dwójki, jedna piątka, dwie trójki”, więc jego opis to (4, 2, 1, 5, 2, 3).
Zapisz w pseudokodzie lub wybranym języku programowania algorytm, który dla danego ciągu A, zapisanego w tablicy A[1..n], obliczy długość jego opisu (liczbę elementów ciągu B) zgodnie z podanymi wcześniej regułami.
Uwaga: W zapisie możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), porównywanie znaków i liczb, odwoływanie się do pojedynczego elementu tablicy, instrukcje sterujące, przypisania do zmiennych lub samodzielnie napisane funkcje, wykorzystujące wyżej wymienione operacje.
Zabronione jest używanie funkcji wbudowanych oraz operatorów innych niż wymienione, dostępnych w językach programowania. Specyfikacja:
Dane: n – liczba całkowita dodatnia – liczba elementów ciągu A A[1..n] – tablica liczb całkowitych dodatnich zawierająca kolejne elementy ciągu A
Wynik: w – liczba elementów ciągu B, będącego opisem ciągu A
gracze.txt gry.txt oceny.txt owoce.txt slowa.txt
Przykład: ciąg (1, 1, 3, 2, 2, 2, 1) to „dwie jedynki, jedna trójka, trzy dwójki i jedna jedynka”, a więc jego opis to (2, 1, 1, 3, 3, 2, 1, 1). Z kolei ciąg (2, 2, 2, 2, 5, 3, 3) to kolejno „cztery dwójki, jedna piątka, dwie trójki”, więc jego opis to (4, 2, 1, 5, 2, 3).
Zapisz w pseudokodzie lub wybranym języku programowania algorytm, który dla danego ciągu A, zapisanego w tablicy A[1..n], obliczy długość jego opisu (liczbę elementów ciągu B) zgodnie z podanymi wcześniej regułami.
Uwaga: W zapisie możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), porównywanie znaków i liczb, odwoływanie się do pojedynczego elementu tablicy, instrukcje sterujące, przypisania do zmiennych lub samodzielnie napisane funkcje, wykorzystujące wyżej wymienione operacje.
Zabronione jest używanie funkcji wbudowanych oraz operatorów innych niż wymienione, dostępnych w językach programowania. Specyfikacja:
Dane: n – liczba całkowita dodatnia – liczba elementów ciągu A A[1..n] – tablica liczb całkowitych dodatnich zawierająca kolejne elementy ciągu A
Wynik: w – liczba elementów ciągu B, będącego opisem ciągu A