2238 - Cifre 005: Diferență între versiuni

De la Universitas MediaWiki
(Am creat de la zero.)
 
Fără descriere a modificării
 
(Nu s-au afișat 2 versiuni intermediare efectuate de același utilizator)
Linia 1: Linia 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.
Linia 26: Linia 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(f"În lista dată există {count} numere cu suma cifrelor divizibilă cu 9 și cu restul {rest}.")
                raise ValueError("Introduceți un număr natural pozitiv.") # Ridica o eroare daca numarul este mai mic sau egal cu 0
    except ValueError as e: # se prinde exceptia aruncata
            numere.append(numar)  # Adauga numarul citit la lista de numere
        print(f"Eroare: {e}")  # se afiseaza mesajul de eroare
            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>
</syntaxhighlight>

Versiunea curentă din 15 mai 2023 17:50

Sursa: [1]

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

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