1862 - CntCifKRec
Cerinţa[edit | edit source]
Să se scrie o funcție Python recursivă cu trei parametri n, k, c și întoarce prin parametrul c numărul de cifre ale lui n care sunt mai mari sau egale decât k.
Restricţii şi precizări[edit | edit source]
- Numele funcției va fi cnt_cif
- Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus
- 0 ⩽ n ⩽ 2.000.000.000
- 0 ⩽ k ⩽ 9
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n și k.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția cnt_cif, reprezentând numărul cerut. În cazul în care n sau k depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă n sau k nu este întreg, se va afișa "Nu ati introdus un numar intreg."
Exemplu[edit | edit source]
- Intrare
- Introduceti n: 2750
- Introduceti k: 4
- Ieșire
- Datele introduse sunt corecte.
- Numarul de cifre mai mari sau egale cu 4 din numarul 2750 este: 2
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_input(n, k):
if not isinstance(n, int) or not isinstance(k, int): return False if not (0 <= n <= 2000000000) or not (0 <= k <= 9): return False return True
def cnt_cif(n, k, c):
if n < 9: if n >= k: c[0] += 1 else: cnt_cif(n // 10, k, c) if n % 10 >= k: c[0] += 1
if __name__ == "__main__":
n = input("Introduceti n: ") k = input("Introduceti k: ") try: n = int(n) k = int(k) if validate_input(n, k): c = [0] # lista pentru a putea modifica valoarea in interiorul functiei cnt_cif(n, k, c) print("Datele introduse sunt corecte.") print(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}") else: print("Numarul introdus nu este valid.") except ValueError: print("Nu ati introdus un numar intreg.")
</syntaxhighlight>
Explicație[edit | edit source]
Funcția `validate_input(n, k)` verifică dacă cele două argumente primite sunt numere întregi și dacă se încadrează în limitele specificate în cerință. Dacă da, returnează `True`, altfel `False`.
Funcția `cnt_cif(n, k, c)` numără câte cifre din numărul `n` sunt mai mari sau egale cu `k`. Aceasta primește `n`, `k` și `c`, unde `c` este o listă care conține un singur element. Acest element va fi actualizat în interiorul funcției pentru a reflecta numărul de cifre din `n` care sunt mai mari sau egale cu `k`.
În funcția `cnt_cif`, numerele sunt parcurse prin recursivitate de la cifra unităților până la cifra cea mai semnificativă. În timp ce numerele sunt parcurse, elementul din lista `c` este actualizat în funcție de cifrele care sunt mai mari sau egale cu `k`.
În funcția principală `main`, se cere utilizatorului să introducă valorile `n` și `k`. Dacă valorile introduse sunt corecte, funcția `cnt_cif` este apelată pentru a număra cifrele mai mari sau egale cu `k` din `n`. Dacă valorile introduse nu sunt corecte, se afișează un mesaj de eroare.