2097 - Vistiernic: Difference between revisions
Diana Butuza (talk | contribs) |
Diana Butuza (talk | contribs) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 12: | Line 12: | ||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
* 1 ⩽ n ⩽ 1000 | * 1 ⩽ n ⩽ 1000 | ||
* 1 ⩽ numărul de pe uşă ⩽ 32767, pentru fiecare încăpere | * 1 ⩽ numărul de pe uşă ⩽ 32767, pentru fiecare încăpere | ||
==Exemplu == | |||
; vistiernic.in | ; vistiernic.in | ||
: 4 | : 4 | ||
Line 20: | Line 20: | ||
: Datele sunt introduse corect. | : Datele sunt introduse corect. | ||
: 3 | : 3 | ||
== Explicație == | == Explicație == | ||
Averea împăratului este egală cu numărul dat de produsul '''8*225*64*15'''. Acest număr se termină în '''3''' zerouri. | Averea împăratului este egală cu numărul dat de produsul '''8*225*64*15'''. Acest număr se termină în '''3''' zerouri. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | # Această funcție validează datele de intrare conform restrițiilor date | ||
def validare_date(n, nr): | |||
if n < 1 or n > 1000: | if n < 1 or n > 1000: | ||
return False | return False | ||
for | for nr in nr: | ||
if | if nr < 1 or nr > 32767: | ||
return False | return False | ||
return True | return True | ||
def | # Această funcție numără numărul de zerouri finale din produsul numerelor date | ||
def numara_zerouri(n, nr): | |||
cnt2 = 0 | cnt2 = 0 | ||
cnt5 = 0 | cnt5 = 0 | ||
for i in range(n): | for i in range(n): | ||
tmp = | tmp = nr[i] | ||
while tmp % 2 == 0: | while tmp % 2 == 0: | ||
cnt2 += 1 | cnt2 += 1 | ||
Line 50: | Line 50: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
with open('vistiernic.in', 'r') as fin, open('vistiernic.out', 'w') as fout: | with open('vistiernic.in', 'r') as fin, open('vistiernic.out', 'w') as fout: | ||
n = int(fin.readline().strip()) | n = int(fin.readline().strip()) # citirea numărului de numere și conversia la int | ||
nr = list(map(int, fin.readline().split())) # citirea listei de numere și conversia la listă de int-uri | |||
if | if validare_date(n, nr): # validare date de intrare | ||
fout.write(str( | fout.write("Datele sunt introduse corect.\n") | ||
fout.write(str(numara_zerouri(n, nr))) # calcularea și scrierea numărului de zerouri în fișierul de ieșire | |||
else: | |||
fout.write("Datele nu corespund restricțiilor impuse.") # scrierea mesajului de eroare în fișierul de ieșire | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 19:37, 9 April 2023
Enunț[edit | edit source]
Împăratul Persiei, Seram dă de ştire în toată împărăția sa, că vrea să-şi aleagă vistiernic care să-i administreze averea. El precizează că visteria palatului are n încăperi numerotate cu numere naturale diferite de 0. Suma de bani pe care o are în aceste încăperi este egală cu produsul numerelor cu care sunt numerotate încăperile visteriei. De asemenea împăratul dă de ştire că va alege pe acel supus vistiernic, care ştie să calculeze în câte zerouri se termină numărul ce reprezintă averea sa.
Cerinţa[edit | edit source]
Scrieţi un program care determină numărul de zerouri în care se termină averea împăratului.
Date de intrare[edit | edit source]
De pe prima linie din fişierul de intrare vistiernic.in se citeşte un număr natural n, ce reprezintă numărul de încăperi ale visteriei. De pe linia următoare se citesc n numere naturale separate prin spaţii reprezentând numerele înscrise pe uşile încăperilor visteriei.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, în fișier se va afișa: "Datele sunt introduse corect.", apoi pe prima linie în fişierul vistiernic.out se va afişa un număr ce reprezintă numărul de zerouri în care se termină averea împăratului. În cazul în care datele nu respectă restricțiile, se va afișa în fișier: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000
- 1 ⩽ numărul de pe uşă ⩽ 32767, pentru fiecare încăpere
Exemplu[edit | edit source]
- vistiernic.in
- 4
- 8 225 64 15
- vistiernic.out
- Datele sunt introduse corect.
- 3
Explicație[edit | edit source]
Averea împăratului este egală cu numărul dat de produsul 8*225*64*15. Acest număr se termină în 3 zerouri.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Această funcție validează datele de intrare conform restrițiilor date
def validare_date(n, nr):
if n < 1 or n > 1000: return False for nr in nr: if nr < 1 or nr > 32767: return False return True
- Această funcție numără numărul de zerouri finale din produsul numerelor date
def numara_zerouri(n, nr):
cnt2 = 0 cnt5 = 0 for i in range(n): tmp = nr[i] while tmp % 2 == 0: cnt2 += 1 tmp //= 2 while tmp % 5 == 0: cnt5 += 1 tmp //= 5 return min(cnt2, cnt5)
if __name__ == '__main__':
with open('vistiernic.in', 'r') as fin, open('vistiernic.out', 'w') as fout: n = int(fin.readline().strip()) # citirea numărului de numere și conversia la int nr = list(map(int, fin.readline().split())) # citirea listei de numere și conversia la listă de int-uri if validare_date(n, nr): # validare date de intrare fout.write("Datele sunt introduse corect.\n") fout.write(str(numara_zerouri(n, nr))) # calcularea și scrierea numărului de zerouri în fișierul de ieșire else: fout.write("Datele nu corespund restricțiilor impuse.") # scrierea mesajului de eroare în fișierul de ieșire
</syntaxhighlight>