0142 - n3579 - Obtinere numar prin aplicare repetata de operatii: Diferență între versiuni
De la Universitas MediaWiki
(Pagină nouă: == Cerința == Cunoscând numărul natural n,să se tipărească şirul de operaţii prin care se poate ajunge de la numărul iniţial 1 la numărul final n. == Date de intrare == Fişierul de intrare n311.in conţine pe prima linie valoarea numărului natural n. == Date de ieșire == Fişierul de ieşire n311.out va conţine pe prima linie şirul de operaţii format din numere întregi separate prin câte un spaţiu, cu semnificaţia de mai sus. == Restricții și precizări...) |
Fără descriere a modificării |
||
Linia 9: | Linia 9: | ||
Pot exista mai multe soluţii, se acceptă oricare, dacă se încadrează în timpul de execuţie; | Pot exista mai multe soluţii, se acceptă oricare, dacă se încadrează în timpul de execuţie; | ||
Nu este obligatorie folosirea tuturor tipurilor de operaţii. | Nu este obligatorie folosirea tuturor tipurilor de operaţii. | ||
== | == Exemplul 1 == | ||
; | ; n311in.txt | ||
:24 | :24 | ||
; | ; n311out.txt | ||
: 1 1 3 -1 3 | : 1 1 3 -1 3 | ||
<br> | <br> | ||
== | == Exemplul 2 == | ||
; | ; n311in.txt | ||
:4 | :4 | ||
; | ; n311out.txt | ||
:1 1 1 | :1 1 1 | ||
<br> | <br> | ||
Linia 28: | Linia 24: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#0142 - n3579 - Obtinere numar prin aplicare repetata de operatii | #0142 - n3579 - Obtinere numar prin aplicare repetata de operatii | ||
def verificare_restrictii(numar): | |||
if 1 < numar <= 2 000 000000: | |||
return True | |||
else: | |||
return False | |||
def construieste_sir_operatii(n): | def construieste_sir_operatii(n): | ||
sir_operatii = [] | sir_operatii = [] | ||
Linia 46: | Linia 47: | ||
return sir_operatii | return sir_operatii | ||
with open(" | with open("n311in.txt", "r") as file_in: | ||
n = int(file_in.readline().strip()) | n = int(file_in.readline().strip()) | ||
sir_operatii = construieste_sir_operatii(n) | sir_operatii = construieste_sir_operatii(n) | ||
with open(" | with open("n311out.txt", "w") as fileout.txt: | ||
file_out.write(" ".join(map(str, sir_operatii))) | file_out.write(" ".join(map(str, sir_operatii))) | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea curentă din 8 ianuarie 2024 16:49
Cerința
Cunoscând numărul natural n,să se tipărească şirul de operaţii prin care se poate ajunge de la numărul iniţial 1 la numărul final n.
Date de intrare
Fişierul de intrare n311.in conţine pe prima linie valoarea numărului natural n.
Date de ieșire
Fişierul de ieşire n311.out va conţine pe prima linie şirul de operaţii format din numere întregi separate prin câte un spaţiu, cu semnificaţia de mai sus.
Restricții și precizări
1 < n <= 2 000 000000; Pot exista mai multe soluţii, se acceptă oricare, dacă se încadrează în timpul de execuţie; Nu este obligatorie folosirea tuturor tipurilor de operaţii.
Exemplul 1
- n311in.txt
- 24
- n311out.txt
- 1 1 3 -1 3
Exemplul 2
- n311in.txt
- 4
- n311out.txt
- 1 1 1
Rezolvare
#0142 - n3579 - Obtinere numar prin aplicare repetata de operatii
def verificare_restrictii(numar):
if 1 < numar <= 2 000 000000:
return True
else:
return False
def construieste_sir_operatii(n):
sir_operatii = []
while n != 1:
sir_operatii.append(n)
if n % 3 == 0:
n //= 3
elif (n - 1) % 3 == 0 and n != 4:
n -= 1
else:
n *= 3
sir_operatii.append(1)
sir_operatii.reverse()
return sir_operatii
with open("n311in.txt", "r") as file_in:
n = int(file_in.readline().strip())
sir_operatii = construieste_sir_operatii(n)
with open("n311out.txt", "w") as fileout.txt:
file_out.write(" ".join(map(str, sir_operatii)))