0370 - Sum Div K

From Bitnami MediaWiki
Revision as of 10:07, 16 May 2023 by Petras.du.ioana (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: [1]


Cerinţa[edit | edit source]

Se dau două numere naturale k și n și apoi n numere naturale. Calculaţi suma celor care au suma cifrelor divizibilă cu k.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele k și n, iar apoi n numere naturale, separate prin spaţii.

Date de ieșire[edit | edit source]

Programul afișează pe ecran numărul S, reprezentând rezultatul cerut.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • 1 ≤ k ≤ 10
  • cele n numere citite vor avea cel mult 7 cifre

Exemplu[edit | edit source]

Intrare
3 5
480 725 72 1698 56
Ieșire
2250

Explicație[edit | edit source]

Sunt 3 numere pentru care suma cifrelor se divide cu 3. Acestea sunt: 480 72 1698, iar suma lor este 2250.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_k_n():

   while True:
       try:
           k = int(input("Introduceti k: "))  # citim k-ul de la tastatura
           n = int(input("Introduceti n: "))  # citim numarul de elemente de la tastatura
           if k < 1 or k > 10 or n < 1 or n > 100:  # validam k-ul si n
               raise ValueError("k trebuie sa fie intre 1 si 10, iar n trebuie sa fie intre 1 si 100")
           return k, n
       except ValueError as e:
           print(e)

def valideaza_numar(numar):

   if numar < 0 or numar > 9999999:  # validam numarul
       raise ValueError("Numarul trebuie sa fie pozitiv si sa aiba cel mult 7 cifre")

def calculeaza_suma_cifrelor_divizibile(k, n):

   suma = 0  # initializam suma cu 0
   for i in range(n):
       while True:
           try:
               numar = int(input(f"Introduceti numarul {i+1}: "))  # citim numarul de la tastatura
               valideaza_numar(numar)
               break  # iesim din while daca am introdus un numar valid
           except ValueError as e:
               print(e)  # afisam mesajul de eroare
       if sum(int(digit) for digit in str(numar)) % k == 0:  # verificam daca suma cifrelor este divizibila cu k
           suma += numar  # adaugam numarul la suma
   return suma

if __name__ == '__main__':

   k, n = citeste_k_n()
   suma = calculeaza_suma_cifrelor_divizibile(k, n)
   print("Suma este:", suma)

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. citirea k-ului si a numarului de elemente

while True:

   try:
       k = int(input("Introduceti k: "))  # citim k-ul de la tastatura
       n = int(input("Introduceti n: "))  # citim numarul de elemente de la tastatura
       if k < 1 or k > 10 or n < 1 or n > 100:  # validam k-ul si n
           raise ValueError("k trebuie sa fie intre 1 si 10, iar n trebuie sa fie intre 1 si 100")
       break  # iesim din while daca am introdus valori valide pentru k si n
   except ValueError as e:
       print(e)  # afisam mesajul de eroare
  1. citirea si suma elementelor

suma = 0 # initializam suma cu 0 for i in range(n):

   while True:
       try:
           x = int(input(f"Introduceti numarul {i+1}: "))  # citim numarul de la tastatura
           if x < 0 or x > 9999999:  # validam numarul
               raise ValueError("Numarul trebuie sa fie pozitiv si sa aiba cel mult 7 cifre")
           break  # iesim din while daca am introdus un numar valid
       except ValueError as e:
           print(e)  # afisam mesajul de eroare
   if sum(int(digit) for digit in str(x)) % k == 0:  # verificam daca suma cifrelor este divizibila cu k
       suma += x  # adaugam numarul la suma
  1. afisarea sumei

print("Suma este:", suma) # afisam suma rezultata

</syntaxhighlight>