1862 - CntCifKRec: Difference between revisions
Pagină nouă: == Cerinţa == 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 == * 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 == Exemplu == După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2. == Important == Soluţia propusă va conţ... |
No edit summary |
||
Line 10: | Line 10: | ||
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2. | După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2. | ||
== | == Explicație == | ||
Această funcție primește un număr întreg pozitiv <code>n</code>, un număr întreg <code>k</code> și o listă <code>c</code> cu un element. Scopul său este de a număra numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>, și de a stoca această valoare în lista <code>c</code>. | |||
Funcția primește parametrii <code>n</code>, <code>k</code> și <code>c</code>, iar lista <code>c</code> trebuie să fie o listă cu un singur element, astfel încât valoarea numărătorului să poată fi stocată și accesată prin referință. | |||
Funcția începe prin verificarea cazului de bază, adică cazul în care <code>n</code> este un singur cifră și verifică dacă această cifră este mai mare sau egală cu <code>k</code>. Dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1. | |||
În caz contrar, se face o apelare recursivă a funcției, cu noul parametru <code>n</code> fără ultima cifră și aceleași valori pentru <code>k</code> și <code>c</code>. Apoi, funcția verifică dacă ultima cifră a lui <code>n</code> este mai mare sau egală cu <code>k</code>, și dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1. | |||
Astfel, după ce toate cifrele din numărul <code>n</code> au fost verificate, lista <code>c</code> conține numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python"> | <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): | def cnt_cif(n, k, c): | ||
if n < 9: | if n < 9: | ||
Line 23: | Line 38: | ||
if n % 10 >= k: | if n % 10 >= k: | ||
c[0] += 1 | c[0] += 1 | ||
def 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(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}") | |||
else: | |||
print("Input invalid!") | |||
except ValueError: | |||
print("Input invalid!") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 13:44, 6 April 2023
Cerinţa
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
- 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
Exemplu
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2.
Explicație
Această funcție primește un număr întreg pozitiv n
, un număr întreg k
și o listă c
cu un element. Scopul său este de a număra numărul de cifre din numărul n
care sunt mai mari sau egale cu k
, și de a stoca această valoare în lista c
.
Funcția primește parametrii n
, k
și c
, iar lista c
trebuie să fie o listă cu un singur element, astfel încât valoarea numărătorului să poată fi stocată și accesată prin referință.
Funcția începe prin verificarea cazului de bază, adică cazul în care n
este un singur cifră și verifică dacă această cifră este mai mare sau egală cu k
. Dacă este adevărat, valoarea stocată în lista c
este crescută cu 1.
În caz contrar, se face o apelare recursivă a funcției, cu noul parametru n
fără ultima cifră și aceleași valori pentru k
și c
. Apoi, funcția verifică dacă ultima cifră a lui n
este mai mare sau egală cu k
, și dacă este adevărat, valoarea stocată în lista c
este crescută cu 1.
Astfel, după ce toate cifrele din numărul n
au fost verificate, lista c
conține numărul de cifre din numărul n
care sunt mai mari sau egale cu k
.
Rezolvare
<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
def 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(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}") else: print("Input invalid!") except ValueError: print("Input invalid!")
</syntaxhighlight>