3250 - Numere 77

From Bitnami MediaWiki
Revision as of 22:29, 15 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 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>

  1. 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()
  1. initializam suma cu 0

suma_echilibrate = 0

  1. 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
  1. afisam suma numerelor echilibrate

print("Datele sunt introduse corect.") print("Suma numerelor echilibrate este:", suma_echilibrate)

</syntaxhighlight>