0367 - Eliminare Cifre

From Bitnami MediaWiki
Revision as of 00:53, 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 un numar de numere naturale. Calculaţi suma numerelor obținute prin eliminarea din fiecare număr dat a tuturor aparițiilor ultimei cifre.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul, iar apoi acel numar de numere naturale, scrise pe randuri diferite.

Date de ieșire[edit | edit source]

Programul afișează pe ecran suma.

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

  • 1 ≤ n ≤ 1000
  • numerele citite vor avea cel mult 6 cifre

Exemplu[edit | edit source]

Intrare
5
27 1131 4 546 112
Ieșire
70

Explicație[edit | edit source]

În urma eliminării aparițiilor ultimei cifre, numerele devin: 2 3 0 54 11. Suma lor este 70.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_nr_numere():

   nr_de_numere = int(input("Introduceți numărul de numere: "))
   while nr_de_numere < 1 or nr_de_numere > 1000:
       nr_de_numere = int(input("Numărul introdus nu este valid. Introduceți un număr între 1 și 1000: "))
   return nr_de_numere

def citeste_numar(index):

   numar = int(input(f"Introduceți numărul {index}: "))
   while numar < 0 or numar > 999999:
       numar = int(input("Numărul introdus nu este valid. Introduceți un număr mai mic sau egal cu 999999: "))
   return numar

def obtine_ultima_cifra(numar):

   return numar % 10

def elimina_aparitii_ultima_cifra(numar, ultima_cifra):

   numar_fara_ultima_cifra = 0
   putere = 1
   while numar > 0:
       cifra = numar % 10
       numar //= 10
       if cifra != ultima_cifra:
           numar_fara_ultima_cifra += cifra * putere
           putere *= 10
   return numar_fara_ultima_cifra

def calculeaza_suma(nr_de_numere):

   suma = 0
   for i in range(nr_de_numere):
       numar = citeste_numar(i + 1)
       ultima_cifra = obtine_ultima_cifra(numar)
       numar_fara_ultima_cifra = elimina_aparitii_ultima_cifra(numar, ultima_cifra)
       suma += numar_fara_ultima_cifra
   return suma

if __name__ == '__main__':

   nr_de_numere = citeste_nr_numere()
   suma = calculeaza_suma(nr_de_numere)
   print("Datele au fost introduse corect.")
   print("Suma numerelor obținute prin eliminarea aparițiilor ultimei cifre din fiecare număr este:", suma)

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. citim numarul de numere n si verificam daca se incadreaza in limitele impuse

nr_de_numere = int(input("Introduceti numarul de numere: ")) while nr_de_numere < 1 or nr_de_numere > 1000:

   nr_de_numere = int(input("Numarul introdus nu este valid. Introduceti un numar intre 1 si 1000: "))
  1. initializam variabila suma cu 0

suma = 0

  1. iteram prin cele n numere

for i in range(nr_de_numere):

   # citim numarul si verificam daca se incadreaza in limitele impuse
   numar = int(input("Introduceti numarul " + str(i + 1) + ": "))
   while numar < 0 or numar > 999999:
       numar = int(input("Numarul introdus nu este valid. Introduceti un numar mai mic sau egal cu 999999: "))
   # obtinem ultima cifra a numarului
   ultima_cifra = numar % 10
   # eliminam toate aparitiile ultimei cifre din numar
   numar_fara_ultima_cifra = 0
   putere = 1
   while numar > 0:
       cifra = numar % 10
       numar //= 10
       if cifra != ultima_cifra:
           numar_fara_ultima_cifra += cifra * putere
           putere *= 10
   # adaugam numarul fara ultima cifra la suma totala
   suma += numar_fara_ultima_cifra
  1. afisam suma totala

print("Datele au fost introduse corect.") print("Suma numerelor obtinute prin eliminarea aparitiilor ultimei cifre din fiecare numar este:", suma)

</syntaxhighlight>