3250 - Numere 77: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
sursa: [https://www.pbinfo.ro/probleme/3250/numere-77] | |||
== Cerinţa == | == Cerinţa == | ||
Se dau două numere naturale primul_numar și al_doilea_numar. Calculați suma numerelor echilibrate din intervalul [primul_numar, al_doilea_numar]. Un număr este echilibrat dacă are suma cifrelor pare egală cu suma cifrelor impare. De exemplu 3467 este echilibrat, iar 8333 nu este. | Se dau două numere naturale primul_numar și al_doilea_numar. Calculați suma numerelor echilibrate din intervalul [primul_numar, al_doilea_numar]. Un număr este echilibrat dacă are suma cifrelor pare egală cu suma cifrelor impare. De exemplu 3467 este echilibrat, iar 8333 nu este. | ||
Line 22: | Line 23: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | |||
def citeste_numerele(): | |||
try: | |||
primul_numar = int(input("Introduceți primul numar: ")) | |||
al_doilea_numar = int(input("Introduceți al doilea numar: ")) | |||
if primul_numar < 0 or al_doilea_numar < 0: | |||
print("Numerele trebuie să fie pozitive.") | |||
exit() | |||
return primul_numar, al_doilea_numar | |||
except ValueError: | |||
print("Datele de intrare trebuie să fie numere întregi.") | |||
exit() | |||
def calculeaza_suma_echilibrate(primul_numar, al_doilea_numar): | |||
suma_echilibrate = 0 | |||
for numar in range(primul_numar, al_doilea_numar+1): | |||
suma_cifre_pare = 0 | |||
suma_cifre_impare = 0 | |||
cifre = str(numar) | |||
for cifra in cifre: | |||
cifra_int = int(cifra) | |||
if cifra_int % 2 == 0: | |||
suma_cifre_pare += cifra_int | |||
else: | |||
suma_cifre_impare += cifra_int | |||
if suma_cifre_pare == suma_cifre_impare: | |||
suma_echilibrate += numar | |||
return suma_echilibrate | |||
def afiseaza_suma_echilibrate(suma): | |||
print("Datele sunt introduse corect.") | |||
print("Suma numerelor echilibrate este:", suma) | |||
if __name__ == "__main__": | |||
numere = citeste_numerele() | |||
suma = calculeaza_suma_echilibrate(numere[0], numere[1]) | |||
afiseaza_suma_echilibrate(suma) | |||
</syntaxhighlight> | |||
=== Rezolvare ver. 2 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Line 61: | Line 111: | ||
print("Datele sunt introduse corect.") | print("Datele sunt introduse corect.") | ||
print("Suma numerelor echilibrate este:", suma_echilibrate) | print("Suma numerelor echilibrate este:", suma_echilibrate) | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 22:29, 15 May 2023
sursa: [1]
Cerinţa[edit | edit source]
Se dau două numere naturale primul_numar și al_doilea_numar. Calculați suma numerelor echilibrate din intervalul [primul_numar, al_doilea_numar]. Un număr este echilibrat dacă are suma cifrelor pare egală cu suma cifrelor impare. De exemplu 3467 este echilibrat, iar 8333 nu este.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele primul_numar și al_doilea_numar.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran numărul suma, reprezentând suma numerelor echilibrate din intervalul [primul_numar, al_doilea_numar].
Restricții și precizări[edit | edit source]
- 1 ≤ primul_numar ≤ al_doilea_numar ≤ 1.000.000
Exemplu[edit | edit source]
- Intrare
- 301
- 402
- Ieșire
- 2097
Explicatie[edit | edit source]
În intervalul [301, 402] numerele echilibrate sunt 314, 336, 341, 358, 363, 385, iar suma lor este 2097.
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def citeste_numerele():
try: primul_numar = int(input("Introduceți primul numar: ")) al_doilea_numar = int(input("Introduceți al doilea numar: ")) if primul_numar < 0 or al_doilea_numar < 0: print("Numerele trebuie să fie pozitive.") exit() return primul_numar, al_doilea_numar except ValueError: print("Datele de intrare trebuie să fie numere întregi.") exit()
def calculeaza_suma_echilibrate(primul_numar, al_doilea_numar):
suma_echilibrate = 0 for numar in range(primul_numar, al_doilea_numar+1): suma_cifre_pare = 0 suma_cifre_impare = 0
cifre = str(numar) for cifra in cifre: cifra_int = int(cifra) if cifra_int % 2 == 0: suma_cifre_pare += cifra_int else: suma_cifre_impare += cifra_int
if suma_cifre_pare == suma_cifre_impare: suma_echilibrate += numar
return suma_echilibrate
def afiseaza_suma_echilibrate(suma):
print("Datele sunt introduse corect.") print("Suma numerelor echilibrate este:", suma)
if __name__ == "__main__":
numere = citeste_numerele() suma = calculeaza_suma_echilibrate(numere[0], numere[1]) afiseaza_suma_echilibrate(suma)
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- citim numerele primul_numar si al_doilea_numar
try:
primul_numar = int(input("Introduceți primul numar: ")) al_doilea_numar = int(input("Introduceți al doilea numar: ")) if primul_numar < 0 or al_doilea_numar < 0: print("Numerele trebuie să fie pozitive.") exit()
except ValueError:
print("Datele de intrare trebuie să fie numere întregi.") exit()
- initializam suma cu 0
suma_echilibrate = 0
- calculam suma numerelor echilibrate
for numar in range(primul_numar, al_doilea_numar+1):
# initializam sumele cifrelor pare si impare cu 0 suma_cifre_pare = 0 suma_cifre_impare = 0
# calculam suma cifrelor pare si suma cifrelor impare ale numarului cifre = str(numar) for cifra in cifre: cifra_int = int(cifra) if cifra_int % 2 == 0: suma_cifre_pare += cifra_int else: suma_cifre_impare += cifra_int
# daca suma cifrelor pare este egala cu suma cifrelor impare, numarul este echilibrat if suma_cifre_pare == suma_cifre_impare: suma_echilibrate += numar
- afisam suma numerelor echilibrate
print("Datele sunt introduse corect.") print("Suma numerelor echilibrate este:", suma_echilibrate)
</syntaxhighlight>