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