4182 - bac secventa

From Bitnami MediaWiki

Cerința

Subprogramul secventa are un singur parametru, n, prin care primește un număr natural, în care nu există secvențe de mai mult de două cifre identice aflate pe poziții consecutive. Subprogramul înlocuiește în n fiecare secvență 22 cu câte o secvență 20 și furnizează, prin același parametru, numărul obținut. Dacă nu se înlocuiește nicio secvență, subprogramul furnizează numărul nemodificat. Scrieți definiția completă a subprogramului.

Restricții și precizări

  • 10 ≤ n < 1.000.000.000
  • Numele funcției va fi secventa
  • Funcția va primi un singur parametru, număruln, iar la finalul funcției nva avea valoarea cerută.


Exemplu

Dacă n=202233228, atunci, după apel, n=202033208.

Important

Soluția propusă va conține doar definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.


Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1"> def secventa(n):

   """
   Funcția înlocuiește în numărul natural dat fiecare secvență de două cifre
   consecutive egale și diferite de zero cu o secvență de două cifre
   formate din prima cifră a secvenței și zero. Returnează numărul modificat.
   """
   # Convertim numărul în șir de caractere pentru a putea manipula cifrele individual
   n_str = str(n)
   i = 0
   # Parcurgem șirul de la stânga la dreapta
   while i < len(n_str) - 1:
       # Dacă găsim o secvență de două cifre consecutive egale și diferite de zero
       if n_str[i] == n_str[i + 1] != "0":
           # Înlocuim secvența cu prima cifră a secvenței urmată de zero
           n_str = n_str[:i] + n_str[i] + "0" + n_str[i + 2:]
           i += 1  # Mutăm cursorul cu o poziție înainte pentru a evita procesarea secvenței din nou
       i += 1  # Mutăm cursorul cu o poziție înainte
   # Convertim rezultatul înapoi în număr întreg și îl returnăm
   return int(n_str)


if __name__ == "__main__":

   # Citim un număr natural de la utilizator
   n = int(input("Introduceți un număr natural: "))
   # Verificăm dacă numărul respectă restricțiile problemei
   if 10 <= n < 1_000_000_000:
       # Aplicăm funcția secventa și afișăm rezultatul
       print("Datele de intrare sunt corecte.")
       result = secventa(n)
       print(f"Numărul obținut este: {result}")
   else:
       # Afișăm un mesaj de eroare dacă numărul nu respectă restricțiile problemei
       print("Numărul trebuie să fie între 10 și 999.999.999.")

</syntaxhighlight>