4206 - CifDiv3Rec: Difference between revisions
Pagină nouă: == Cerinţa == Să se scrie o funcție Python recursivă care să returneze numărul cifrelor divizibile cu 3 ale unui număr natural n transmis ca parametru. == Restricţii şi precizări == * Numele funcției va fi CifDiv3Rec * Funcția va avea un parametru reprezentând numărul dat n * 0 ≤ n ≤ 2.000.000.000 == Exemplu == CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6. == Important == Soluţia propusă va conţine d... |
No edit summary |
||
Line 9: | Line 9: | ||
CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6. | CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6. | ||
== | == Explicație == | ||
Funcția <code>CifDiv3Rec</code> primește ca parametru un număr întreg pozitiv <code>n</code> și returnează numărul de cifre ale acestuia care sunt divizibile cu 3. | |||
Funcția utilizează o abordare recursivă, în care se calculează cifra unităților a numărului <code>n</code> și se verifică dacă aceasta este divizibilă cu 3. Dacă este, se adaugă 1 la numărul de cifre divizibile cu 3 găsite până acum și se reapelează funcția pentru a verifica cifra următoare. În caz contrar, se reapelează funcția fără a adăuga 1 la numărul de cifre divizibile cu 3 găsite până acum. | |||
Procesul continuă până când toate cifrele numărului <code>n</code> au fost verificate, moment în care se va returna numărul de cifre divizibile cu 3 găsite în total. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
def validate_n(n): | |||
if isinstance(n, int) and n >= 0 and n <= 2_000_000_000: | |||
return True | |||
else: | |||
return False | |||
def CifDiv3Rec(n): | def CifDiv3Rec(n): | ||
if n == 0: | if n == 0: | ||
Line 21: | Line 31: | ||
else: | else: | ||
return CifDiv3Rec(n // 10) | return CifDiv3Rec(n // 10) | ||
def main(): | |||
n = input("Introduceți un număr întreg pozitiv: ") | |||
try: | |||
n = int(n) | |||
if validate_n(n): | |||
result = CifDiv3Rec(n) | |||
if result == 0: | |||
print("Nu există cifre divizibile cu 3 în numărul introdus.") | |||
else: | |||
print(f"Numărul de cifre divizibile cu 3 din numărul introdus este: {result}") | |||
else: | |||
print("Numărul introdus nu este valid.") | |||
except ValueError: | |||
print("Nu ați introdus un număr întreg.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 10:07, 6 April 2023
Cerinţa
Să se scrie o funcție Python recursivă care să returneze numărul cifrelor divizibile cu 3 ale unui număr natural n transmis ca parametru.
Restricţii şi precizări
- Numele funcției va fi CifDiv3Rec
- Funcția va avea un parametru reprezentând numărul dat n
- 0 ≤ n ≤ 2.000.000.000
Exemplu
CifDiv3Rec(2009376) este 5, cifrele divizibile cu 3 fiind, de la stânga la dreapta, 0, 0, 9, 3, 6.
Explicație
Funcția CifDiv3Rec
primește ca parametru un număr întreg pozitiv n
și returnează numărul de cifre ale acestuia care sunt divizibile cu 3.
Funcția utilizează o abordare recursivă, în care se calculează cifra unităților a numărului n
și se verifică dacă aceasta este divizibilă cu 3. Dacă este, se adaugă 1 la numărul de cifre divizibile cu 3 găsite până acum și se reapelează funcția pentru a verifica cifra următoare. În caz contrar, se reapelează funcția fără a adăuga 1 la numărul de cifre divizibile cu 3 găsite până acum.
Procesul continuă până când toate cifrele numărului n
au fost verificate, moment în care se va returna numărul de cifre divizibile cu 3 găsite în total.
Rezolvare
<syntaxhighlight lang="python"> def validate_n(n):
if isinstance(n, int) and n >= 0 and n <= 2_000_000_000: return True else: return False
def CifDiv3Rec(n):
if n == 0: return 0 elif n % 10 % 3 == 0: return 1 + CifDiv3Rec(n // 10) else: return CifDiv3Rec(n // 10)
def main():
n = input("Introduceți un număr întreg pozitiv: ") try: n = int(n) if validate_n(n): result = CifDiv3Rec(n) if result == 0: print("Nu există cifre divizibile cu 3 în numărul introdus.") else: print(f"Numărul de cifre divizibile cu 3 din numărul introdus este: {result}") else: print("Numărul introdus nu este valid.") except ValueError: print("Nu ați introdus un număr întreg.")
</syntaxhighlight>