4182 - bac secventa: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: ==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ț...)
 
Linia 48: Linia 48:
     if 10 <= n < 1_000_000_000:
     if 10 <= n < 1_000_000_000:
         # Aplicăm funcția secventa și afișăm rezultatul
         # Aplicăm funcția secventa și afișăm rezultatul
        print("Datele de intrare sunt corecte.")
         result = secventa(n)
         result = secventa(n)
         print(f"Numărul obținut este: {result}")
         print(f"Numărul obținut este: {result}")

Versiunea de la data 2 aprilie 2023 19:18

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

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.")