3356 - Alfa: Difference between revisions
Pagină nouă: == 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 da... |
No edit summary |
||
Line 21: | Line 21: | ||
def transforma_sir(n, x, sir): | def transforma_sir(n, x, sir): | ||
i = 0 | i = 0 | ||
# Parcurgem șirul de numere | |||
while i < n: | while i < n: | ||
# Dacă numărul curent este egal cu x | |||
if sir[i] == x: | if sir[i] == x: | ||
# Căutăm următorul număr egal cu x | |||
j = i + 1 | j = i + 1 | ||
while j < n and sir[j] != x: | while j < n and sir[j] != x: | ||
j += 1 | j += 1 | ||
# Dacă am găsit un alt număr egal cu x | |||
if j < n: | if j < n: | ||
# Sortăm numerele dintre cele două numere egale cu x | |||
sir[i+1:j] = sorted(sir[i+1:j]) | sir[i+1:j] = sorted(sir[i+1:j]) | ||
# Ne mutăm la următorul număr egal cu x | |||
i = j | i = j | ||
else: | else: | ||
# Dacă numărul curent nu este egal cu x, trecem la următorul număr | |||
i += 1 | i += 1 | ||
# Întoarcem șirul transformat | |||
return sir | return sir | ||
Line 37: | Line 45: | ||
x = 3 | x = 3 | ||
sir = [3, 4, 1, 2, 3, 7, 9, 8, 3, 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)) | print(transforma_sir(n, x, sir)) | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 13:26, 3 November 2023
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>