2238 - Cifre 005: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/2238/cifre005]
== Cerinţa ==
== 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.
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.
Line 26: Line 27:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


numere = [] # lista in care vor fi stocate numerele introduse
def citeste_numere(numar_elemente):
    numere = []


while True:
    for _ in range(numar_elemente):
    try:
        while True:
        # se citeste un numar de la tastatura
            try:
        numar = int(input("Introduceți un număr natural: "))
                numar = int(input("Introduceți un număr natural: ")) # Citeste un numar de la utilizator
        # daca numarul este negativ sau 0, se arunca o exceptie
                if numar <= 0:
        if numar <= 0:
                    raise ValueError("Introduceți un număr natural pozitiv.") # Ridica o eroare daca numarul este mai mic sau egal cu 0
            raise ValueError("Introduceți un număr natural pozitiv.")
                numere.append(numar)  # Adauga numarul citit la lista de numere
        # daca numarul este pozitiv, se adauga in lista
                break
        numere.append(numar)   
            except ValueError as e:
    except ValueError as e: # se prinde exceptia aruncata
                print(f"Eroare: {e}")  # Afiseaza eroarea daca numarul introdus nu este valid
        print(f"Eroare: {e}")  # se afiseaza mesajul de eroare


     raspuns = input("Mai doriți să introduceți un număr? (da/nu): ")
     return numere
    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
def calculeaza_count(numere, rest):
     print("Nu s-a introdus niciun număr.")
    count = 0
else:
    for numar in numere:
    try:
        suma_cifrelor = 0
        # se citeste restul de la tastatura
        while numar > 0:
        rest = int(input("Introduceți restul împărțirii la 9: "))
            suma_cifrelor += numar % 10  # Calculeaza suma cifrelor numarului
        # se verifica daca restul este sau nu intre 0 si 8
            numar //= 10
         if rest < 0 or rest > 8:
        if suma_cifrelor % 9 == rest:  # Verifica daca suma cifrelor este divizibila cu 9 si are restul specificat
             # daca restul nu este intre 0 si 8, se arunca o exceptie
            count += 1
            raise ValueError("Introduceți un număr între 0 și 8.")
 
        # Variabila count va contoriza numerele din lista care respecta conditia.
     return count
         count = 0
 
        for numar in numere:
numere = []
            suma_cifrelor = 0
numar_elemente = int(input("Introduceți numărul de elemente: ")# Citeste numarul de elemente de la utilizator
            while numar > 0:
rest = int(input("Introduceți restul împărțirii la 9: ")) # Citeste restul impartirii la 9 de la utilizator
                # se calculeaza suma cifrelor numarului
 
                suma_cifrelor += numar % 10
for _ in range(numar_elemente):
                numar //= 10
    while True:
            if suma_cifrelor % 9 == rest:   
         try:
                # daca suma cifrelor impartita la 9 da restul dat, se incrementeaza contorul
             numar = int(input("Introduceți un număr natural: "))  # Citeste un numar de la utilizator
                count += 1
            if numar <= 0:
        print("Datele sunt introduse corect.")
                raise ValueError("Introduceți un număr natural pozitiv.") # Ridica o eroare daca numarul este mai mic sau egal cu 0
        print(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.")
            numere.append(numar)  # Adauga numarul citit la lista de numere
    except ValueError as e: # se prinde exceptia aruncata
            break
     
         except ValueError as e:
        print(f"Eroare: {e}")  # se afiseaza mesajul de eroare
            print(f"Eroare: {e}")  # Afiseaza eroarea daca numarul introdus nu este valid
 
count = 0
for numar in numere:
    suma_cifrelor = 0
    while numar > 0:
        suma_cifrelor += numar % 10 # Calculeaza suma cifrelor numarului
        numar //= 10
    if suma_cifrelor % 9 == rest:  # Verifica daca suma cifrelor este divizibila cu 9 si are restul specificat
        count += 1
 
print(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.")  # Afiseaza rezultatul final




</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 17:50, 15 May 2023

Sursa: [1]

Cerinţa[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ≤ n ≤ 200.000
  • 0 ≤ r ≤ 8
  • cele n numere citite vor fi mai mici decât 1018

Exemplu[edit | edit source]

Intrare
3 2
 11 200 3310
Ieșire
2

Explicație[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_numere(numar_elemente):

   numere = []
   for _ in range(numar_elemente):
       while True:
           try:
               numar = int(input("Introduceți un număr natural: "))  # Citeste un numar de la utilizator
               if numar <= 0:
                   raise ValueError("Introduceți un număr natural pozitiv.")  # Ridica o eroare daca numarul este mai mic sau egal cu 0
               numere.append(numar)  # Adauga numarul citit la lista de numere
               break
           except ValueError as e:
               print(f"Eroare: {e}")  # Afiseaza eroarea daca numarul introdus nu este valid
   return numere

def calculeaza_count(numere, rest):

   count = 0
   for numar in numere:
       suma_cifrelor = 0
       while numar > 0:
           suma_cifrelor += numar % 10  # Calculeaza suma cifrelor numarului
           numar //= 10
       if suma_cifrelor % 9 == rest:  # Verifica daca suma cifrelor este divizibila cu 9 si are restul specificat
           count += 1
   return count

numere = [] numar_elemente = int(input("Introduceți numărul de elemente: ")) # Citeste numarul de elemente de la utilizator rest = int(input("Introduceți restul împărțirii la 9: ")) # Citeste restul impartirii la 9 de la utilizator

for _ in range(numar_elemente):

   while True:
       try:
           numar = int(input("Introduceți un număr natural: "))  # Citeste un numar de la utilizator
           if numar <= 0:
               raise ValueError("Introduceți un număr natural pozitiv.")  # Ridica o eroare daca numarul este mai mic sau egal cu 0
           numere.append(numar)  # Adauga numarul citit la lista de numere
           break
       except ValueError as e:
           print(f"Eroare: {e}")  # Afiseaza eroarea daca numarul introdus nu este valid

count = 0 for numar in numere:

   suma_cifrelor = 0
   while numar > 0:
       suma_cifrelor += numar % 10  # Calculeaza suma cifrelor numarului
       numar //= 10
   if suma_cifrelor % 9 == rest:  # Verifica daca suma cifrelor este divizibila cu 9 si are restul specificat
       count += 1

print(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.") # Afiseaza rezultatul final


</syntaxhighlight>