2238 - Cifre 005
Cerinţa
Se da o lista numere naturale. Să se afle pentru câte dintre numere, suma cifrelor împărţită la 9 dă restul citit de la tastatura.
Date de intrare
Programul citește de la tastatură numerele lista de numere şi restul, iar apoi numerele naturale date, separate prin spații.
Date de ieşire
Programul va afișa pe ecran numărul de numere citite pentru care suma cifrelor dă restul dat la împărţirea cu 9.
Restricții și precizări
- 1 ≤ n ≤ 200.000
- 0 ≤ r ≤ 8
- cele n numere citite vor fi mai mici decât 1018
Exemplu
- Intrare
- 3 2
11 200 3310
- Ieșire
- 2
Explicație
Se dă n=3 şi r=2. S-au citit 3 numere : 11 are suma cifrelor 2 şi dă restul 2 la împărţirea cu 9, 200 are suma cifrelor 2 şi dă restul 2 la împărţirea cu 9, iar 3310 are suma cifrelor 7, care dă restul 7 la împărţirea cu 9. Deci două numere au proprietatea cerută.
Rezolvare
<syntaxhighlight lang="python" line>
numere = [] # lista in care vor fi stocate numerele introduse
while True:
try: # se citeste un numar de la tastatura numar = int(input("Introduceți un număr natural: ")) # daca numarul este negativ sau 0, se arunca o exceptie if numar <= 0: raise ValueError("Introduceți un număr natural pozitiv.") # daca numarul este pozitiv, se adauga in lista numere.append(numar) except ValueError as e: # se prinde exceptia aruncata print(f"Eroare: {e}") # se afiseaza mesajul de eroare
raspuns = input("Mai doriți să introduceți un număr? (da/nu): ") if raspuns.lower() == "nu": # daca raspunsul este "nu", se iese din while break
if len(numere) == 0: # daca nu s-a introdus niciun numar, se afiseaza un mesaj
print("Nu s-a introdus niciun număr.")
else:
try: # se citeste restul de la tastatura rest = int(input("Introduceți restul împărțirii la 9: ")) # se verifica daca restul este sau nu intre 0 si 8 if rest < 0 or rest > 8: # daca restul nu este intre 0 si 8, se arunca o exceptie raise ValueError("Introduceți un număr între 0 și 8.") # Variabila count va contoriza numerele din lista care respecta conditia. count = 0 for numar in numere: suma_cifrelor = 0 while numar > 0: # se calculeaza suma cifrelor numarului suma_cifrelor += numar % 10 numar //= 10 if suma_cifrelor % 9 == rest: # daca suma cifrelor impartita la 9 da restul dat, se incrementeaza contorul count += 1 print(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.") except ValueError as e: # se prinde exceptia aruncata print(f"Eroare: {e}") # se afiseaza mesajul de eroare
</syntaxhighlight>