3356 - Alfa

From Bitnami MediaWiki
Revision as of 13:26, 3 November 2023 by Zmicala Narcis (talk | contribs)

Cerinţa

Se dă un șir format din n numere naturale. Se mai dă o valoare x și se garantează că șirul începe și se termină cu valoarea x. Transformați șirul astfel:

  • Elementele cu valoarea x rămân pe pozițiile lor;
  • Secvențele de elemente diferile de x aflate între două poziții cu valoarea x se ordonează crescător (între aceleași două elemente cu valoarea x se vor afla aceleași elemente ca la început dar în ordine crescătoare).

Date de intrare

Fișierul alfa.in conține pe prima linie un număr natural n reprezentând dimensiunea șirului și un număr x cu semnificația de mai sus. Pe linia a doua n numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.

Date de ieşire

Fișierul alfa.out conține cele n elemente ale șirului în ordinea cerută.

Restricții și precizări

  • 2 <= n <= 1000
  • Elementele șirului dat sunt naturale nenule formate din maximum 4 cifre
  • Pentru 40 de puncte șirul conține doar două elemente cu valoarea x (primul și ultimul).

Exemplu

alfa.in
10 3
3 4 1 2 3 7 9 8 3 3
alfa.out
3 1 2 4 3 7 8 9 3 3

Rezolvare

<syntaxhighlight lang="python" line> def transforma_sir(n, x, sir):

   i = 0
   # Parcurgem șirul de numere
   while i < n:
       # Dacă numărul curent este egal cu x
       if sir[i] == x:
           # Căutăm următorul număr egal cu x
           j = i + 1
           while j < n and sir[j] != x:
               j += 1
           # Dacă am găsit un alt număr egal cu x
           if j < n:
               # Sortăm numerele dintre cele două numere egale cu x
               sir[i+1:j] = sorted(sir[i+1:j])
           # Ne mutăm la următorul număr egal cu x
           i = j
       else:
           # Dacă numărul curent nu este egal cu x, trecem la următorul număr
           i += 1
   # Întoarcem șirul transformat
   return sir

if __name__ == "__main__":

   n = 10
   x = 3
   sir = [3, 4, 1, 2, 3, 7, 9, 8, 3, 3]
   # Apelăm funcția cu valorile date și afișăm rezultatul
   print(transforma_sir(n, x, sir))

</syntaxhighlight>