0370 - Sum Div K
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>
- 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
- 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
- afisarea sumei
print("Suma este:", suma) # afisam suma rezultata
</syntaxhighlight>