2238 - Cifre 005: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
Line 67: Line 67:
         print(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.")
         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
     except ValueError as e:  # se prinde exceptia aruncata
        print("Datele sunt introduse corect.")
         print(f"Eroare: {e}")  # se afiseaza mesajul de eroare
         print(f"Eroare: {e}")  # se afiseaza mesajul de eroare




</syntaxhighlight>
</syntaxhighlight>

Revision as of 19:25, 2 April 2023

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("Datele sunt introduse corect.")
       print(f"Eroare: {e}")  # se afiseaza mesajul de eroare


</syntaxhighlight>