1636 - Cifre 15: Difference between revisions
Am creat de la zero. |
|||
Line 28: | Line 28: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare(nr_de_numere, numere): | |||
if nr_de_numere < 1 or nr_de_numere > 100: | |||
return False | |||
for numar in numere: | |||
if numar < 1 or numar > 10**9: | |||
return False | |||
return True | |||
def inmultire_numere(numere): | |||
numar_zero = 0 | |||
ultima_cifra_nenula = None | |||
produs = 1 | |||
for numar in numere: | |||
produs *= numar | |||
while produs != 0 and produs % 10 == 0: | |||
numar_zero += 1 | |||
produs //= 10 | |||
if produs != 0: | |||
ultima_cifra_nenula = produs % 10 | |||
return numar_zero, ultima_cifra_nenula | |||
def afisare(numar_zero, ultima_cifra_nenula): | |||
with open("cifre15.out", "w") as f: | |||
f.write(str(numar_zero) + " " + str(ultima_cifra_nenula) + "\n") | |||
if __name__ == "__main__": | |||
with open("cifre15.in") as f: | |||
nr_de_numere = int(f.readline().strip()) | |||
numere = list(map(int, f.readline().split())) | |||
if not validare(nr_de_numere, numere): | |||
print("Eroare: Datele introduse nu sunt valide!") | |||
exit() | |||
rezultat = inmultire_numere(numere) | |||
afisare(*rezultat) | |||
print("Datele au fost introduse corect.") | |||
</syntaxhighlight> | |||
=== Rezolvare ver. 2 === | |||
<syntaxhighlight lang="python" line> | |||
# citirea datelor de intrare | # citirea datelor de intrare | ||
with open("cifre15.in") as f: | with open("cifre15.in") as f: |
Latest revision as of 08:50, 19 May 2023
Sursa: [1]
Cerința[edit | edit source]
Alin este un elev pasionat de înmulțirea numerelor. Știe că produsul a două sau mai multe numere naturale poate avea ultima cifră 0. Se dau n numere naturale nenule. Ajutați-l pe Alin să determine: a. numărul de cifre 0 de la sfârşitul produsului celor n numere; b. care este ultima cifră nenulă a acestui produs.
Date de intrare[edit | edit source]
De pe prima linie a fișierului cifre15.in se citește un număr natural n iar de pe următoarea linie din fișier se citesc n numere naturale nenule, separate prin câte un spaţiu.
Date de ieșire[edit | edit source]
Fișierul de ieșire cifre15.out conține o singură linie pe care vor fi scrise cele două valori determinate, separate printr-un singur spațiu.
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 100 numerele de pe a doua linie a fișierului de intrare au cel mult 9 cifre.
Exemplu:[edit | edit source]
- cifre15.in
- 3
- 50 12 18
- cifre15.out
- 2 8
Explicație[edit | edit source]
50∙12∙18=10800, la finalul produsului sunt 2 cifre 0, iar ultima cifră nenulă este 8
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def validare(nr_de_numere, numere):
if nr_de_numere < 1 or nr_de_numere > 100: return False for numar in numere: if numar < 1 or numar > 10**9: return False return True
def inmultire_numere(numere):
numar_zero = 0 ultima_cifra_nenula = None produs = 1 for numar in numere: produs *= numar while produs != 0 and produs % 10 == 0: numar_zero += 1 produs //= 10 if produs != 0: ultima_cifra_nenula = produs % 10 return numar_zero, ultima_cifra_nenula
def afisare(numar_zero, ultima_cifra_nenula):
with open("cifre15.out", "w") as f: f.write(str(numar_zero) + " " + str(ultima_cifra_nenula) + "\n")
if __name__ == "__main__":
with open("cifre15.in") as f: nr_de_numere = int(f.readline().strip()) numere = list(map(int, f.readline().split()))
if not validare(nr_de_numere, numere): print("Eroare: Datele introduse nu sunt valide!") exit()
rezultat = inmultire_numere(numere) afisare(*rezultat) print("Datele au fost introduse corect.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- citirea datelor de intrare
with open("cifre15.in") as f:
# se citește nr_de_numere, numărul de numere ce trebuie înmulțite nr_de_numere = int(f.readline().strip()) # se citește lista de n numere numere = list(map(int, f.readline().split()))
- validarea datelor de intrare
if nr_de_numere < 1 or nr_de_numere > 100:
print("Eroare: Numarul introdus nu respectă restricțiile problemei!") exit()
for numar in numere:
if numar < 1 or numar > 10**9: print("Eroare: Unul dintre numere nu respectă restricțiile problemei!") exit()
- inițializarea variabilelor
numar_zero = 0 # numărul de cifre 0 de la sfârșitul produsului numerelor ultima_cifra_nenula = None # ultima cifră nenulă a produsului numerelor
- înmulțirea numerelor și determinarea ultimei cifre nenule
produs = 1 for numar in numere:
produs *= numar # se elimină cifrele 0 de la sfârșitul produsului while produs != 0 and produs % 10 == 0: numar_zero += 1 produs //= 10 # se determină ultima cifră nenulă a produsului if produs != 0: ultima_cifra_nenula = produs % 10
- scrierea datelor de ieșire
with open("cifre15.out", "w") as f:
f.write(str(numar_zero) + " " + str(ultima_cifra_nenula) + "\n")
print("Datele introduse sunt valide.")
</syntaxhighlight>