2238 - Cifre 005

From Bitnami MediaWiki

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("Datele sunt introduse corect.")
       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>