0371 - Numarare

From Bitnami MediaWiki

Sursa: [1]


Cerinţa[edit | edit source]

Se citesc n numere naturale. Determinați câte perechi de numere citite consecutiv au aceeași sumă a cifrelor.

Date de intrare[edit | edit source]

Programul citește de la tastatură un număr natural, iar apoi acel numar de numere naturale.

Date de ieșire[edit | edit source]

Programul afișează pe ecran numărul de perechi de numere citite consecutiv care au aceeași sumă a cifrelor.

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

  • 1 ≤ n ≤ 100
  • cele n numere citite vor avea cel mult 9 cifre

Exemplu[edit | edit source]

Intrare
5
176 293 52421 91 424
Ieșire
3

Explicație[edit | edit source]

Cele 3 perechi sunt: 176 293, 293 52421, 91 424.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_nr_de_numere():

   while True:
       try:
           nr_de_numere = int(input("Introduceti numarul de numere: "))
           if nr_de_numere < 1 or nr_de_numere > 100:
               raise ValueError("Numarul de numere trebuie sa fie intre 1 si 100.")
           return nr_de_numere
       except ValueError as e:
           print(e)
           print("Introduceti un numar valid intre 1 si 100.")

def valideaza_numar(num):

   if num < 0 or num > 999999999:
       raise ValueError("Fiecare numar trebuie sa fie un numar natural cu cel mult 9 cifre.")

def citeste_lista_numere(nr_de_numere):

   numere = []
   for i in range(nr_de_numere):
       while True:
           try:
               num = int(input("Introduceti numarul {}: ".format(i + 1)))
               valideaza_numar(num)
               numere.append(num)
               break
           except ValueError as e:
               print(e)
               print("Introduceti un numar valid pentru numarul {}: ".format(i + 1))
   return numere

def numara_perechi_cu_aceeasi_suma_cifre(numere):

   pair_count = 0
   for i in range(1, len(numere)):
       suma1 = sum(int(digit) for digit in str(numere[i - 1]))
       suma2 = sum(int(digit) for digit in str(numere[i]))
       if suma1 == suma2:
           pair_count += 1
   return pair_count

if __name__ == '__main__':

   nr_de_numere = citeste_nr_de_numere()
   numere = citeste_lista_numere(nr_de_numere)
   pair_count = numara_perechi_cu_aceeasi_suma_cifre(numere)
   print("Numarul de perechi de numere cu aceeasi suma a cifrelor este: {}".format(pair_count))

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Citim numarul de numere

nr_de_numere = int(input("Introduceti numarul de numere: "))

  1. Validam numarul de numere

while True:

   try:
       if nr_de_numere < 1 or nr_de_numere > 100:
           raise ValueError("Numarul de numere trebuie sa fie intre 1 si 100.")
       break
   except ValueError as e:
       print(e)
       nr_de_numere = int(input("Introduceti un numar valid intre 1 si 100: "))
  1. Citim lista de numere

numere = [] for i in range(nr_de_numere):

   num = int(input("Introduceti numarul {}: ".format(i + 1)))
   while True:
       try:
           if num < 0 or num > 999999999:
               raise ValueError("Fiecare numar trebuie sa fie un numar natural cu cel mult 9 cifre.")
           break
       except ValueError as e:
           print(e)
           num = int(input("Introduceti un numar valid pentru numarul {}: ".format(i + 1)))
   numere.append(num)
  1. Initializam un contor pentru perechile de numere cu aceeasi suma a cifrelor

pair_count = 0

  1. Parcurgem lista de numere si verificam perechile consecutive

for i in range(1, nr_de_numere):

   # Calculam suma cifrelor primului numar din pereche
   suma1 = sum(int(digit) for digit in str(numere[i - 1]))
   # Calculam suma cifrelor celui de-al doilea numar din pereche
   suma2 = sum(int(digit) for digit in str(numere[i]))
   # Daca cele doua sume sunt egale, incrementam contorul
   if suma1 == suma2:
       pair_count += 1
  1. Afisam numarul de perechi cu aceeasi suma a cifrelor

print("Numarul de perechi de numere cu aceeasi suma a cifrelor este: {}".format(pair_count))

</syntaxhighlight>