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>