Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
3223 - Scobitoare
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Cerința== Lui Ion îi plac scobitorile. Norocul său a fost că black friday tocmai a venit și a cumpărat un număr infinit de scobitori (să zicem că o duce destul de bine). Ținând cont că are extrem de multe scobitori, el a vrut să se joace cu ele, așa că a creat un joc. La primul pas, el pune o singură scobitoare în mijlocul mesei. Începând cu al doilea pas, el pune câte o scobitoare la fiecare capăt liber al scobitorilor plasate până acum, astfel încât cele două scobitori sunt perpendiculare și mijlocul scobitorii noi se afla la vârful scobitorii vechi. Un vârf de scobitoare este liber dacă nu atinge o altă scobitoare. Determinați : 1. Numărul de scobitori aflate pe masă la pasul N. : 2. Numărul de scobitori care au fost adăugate la pasul N. ==Date de intrare== Fișierul de intrare scobitoare.in conține pe prima linie două numere: P, care va reprezenta cerința, și N, cu semnificația din enunț. ==Date de ieșire== Fișierul de ieșire scobitoare.out va conține numărul cerut, iar consola va afișa mesajul de validare a datelor ("Date de intrare valide" sau "Date de intrare invalide", în funcție de validitatea datelor). ==Restricții și precizări== * 1 ⩽ n ⩽ 1000 ==Exemplu== ; scobitoare.in : 2 197 ; scobitoare.out : 60 ; Consolă : Date de intrare valide ==Rezolvare== <syntaxhighlight lang="python"> import math def T(n): if n == 1: return 1 elif n == 2: return 3 elif n == 3: return 7 elif n == 4: return 11 else: Puterea = 0 PutereDeDoi = 1 while PutereDeDoi < n: Puterea += 1 PutereDeDoi *= 2 if PutereDeDoi == n: return (int(math.pow(2, 2 * Puterea + 1)) + 1) // 3 else: PutereDeDoi = PutereDeDoi // 2 return T(PutereDeDoi) + 2 * T(n - PutereDeDoi) + T(n - PutereDeDoi + 1) - 1 def validate_input(n): if n < 1 or n > 1000: return False else: return True def read_input(): with open("scobitoare.in", "r") as f: p = int(f.readline()) n = int(f.readline()) if not validate_input(n): print("Date de intrare invalide") return return p, n def write_output(output): with open("scobitoare.out", "w") as g: g.write(str(output)) print("Date de intrare valide\n") if __name__ == "__main__": inputs = read_input() if inputs: p, n = inputs if p == 1: output = T(n) else: output = T(n) - T(n - 1) write_output(output) </syntaxhighlight> ==Explicație cod== Acest cod este scris în limbajul Python și conține următoarele funcții: 1. Funcția "T(n)" calculează valoarea funcției T definită recursiv după cum urmează: T(1) = 1, T(2) = 3, T(3) = 7, T(4) = 11, T(n) = 2*T(n-1) + T(n-2) + T(n-3) - 1 pentru n > 4. În cazul în care n este o putere a lui 2, se aplică o formulă alternativă care folosește funcția "pow" din biblioteca Python "math". 2. Funcția "validate_input(n)" returnează "True" dacă n se află între 1 și 1000 și "False" altfel. 3. Funcția "read_input()" citește din fișierul "scobitoare.in" două numere întregi: "p" și "n". Funcția verifică dacă n este valid folosind funcția "validate_input(n)". În caz contrar, scrie în consolă mesajul "Date de intrare invalide" și se termină. 4. Funcția "write_output(output)" scrie valoarea "output" în fișierul "scobitoare.out". 5. În blocul "if __name__ == '__main__':", funcția "read_input()" este apelată pentru a citi inputul. Dacă inputul este valid, se calculează valoarea lui "output" folosind funcția "T(n)" și se apelează funcția "write_output(output)" pentru a scrie outputul în fișierul "scobitoare.out". În cazul în care p este diferit de 1, se calculează diferența dintre T(n) și T(n-1).
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width