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

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

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

Date de ieșire

Programul afișează pe ecran suma.

Restricţii şi precizări

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

Exemplu

Intrare
5
27 1131 4 546 112
Ieșire
70

Explicație

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

Rezolvare

Rezolvare ver. 1

<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

<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>