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
2812 - Progresie3
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!
Sursa: [https://www.pbinfo.ro/probleme/2812/progresie3 - Progresie3] ---- == Cerinţa == Un șir de numere este o '''progresie aritmetică de rație r''' dacă oricare termen al său, cu excepția primului, se obține din cel care îl precede, prin adunarea la acesta a numărului r. '''Exemplu''': șirul 12, 14, 16, 18, 20 este o progresie de rație 2. Se dă un șir de cel mult 1.000.000 numere naturale din intervalul [0,1.000]. Se cere să se verifice dacă există un număr natural '''r''', astfel încât toate numerele distincte din șir să poată fi rearanjate, pentru a forma o progresie aritmetică de rație '''r'''. Se afișează numărul '''r''', sau mesajul '''NU''', dacă nu există un astfel de număr. == Date de intrare == Fișierul de intrare '''progresie3.in''' conține cel mult 1.000.000 numere naturale din intervalul [0,1.000], separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul e ieșire '''progresie3.out''' va conține pe prima linie numărul '''r''', sau mesajul '''NU''', dacă nu există un astfel de număr. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.". == Restricţii şi precizări == * în șirul dat există cel puțin două valori distincte * proiectați un algoritm eficient din punctul de vedere al timpului de executare. == Exemple == ===Exemplul 1=== ; progresie3.in : 180 30 80 280 130 330 230 30 30 330 80 ; Ieșire : Datele sunt corecte. ; progresie3.out : 50 ===Exemplul 2=== ; progresie3.in : 1 2 3 4 6 ; Ieșire : Datele sunt corecte. ; progresie3.out : NU ===Exemplul 3=== ; progresie3.in : 100 100 100 ; Ieșire : Datele nu sunt comform restricțiilor impuse. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 2812 Progresie3 def progresie(vector): f = open("progresie3.out", "w") ratie = int() vector.sort() r = int() for i in range(len(vector) - 1): if vector[i] != vector[i + 1]: ratie = vector[i + 1] - vector[i] r = ratie break for i in range(len(vector) - 1): if vector[i] != vector[i + 1]: ratie = vector[i + 1] - vector[i] if ratie != r: f.write("NU") exit() f.write(str(r)) def conform_restrictiilor(): vector = list() with open('progresie3.in') as f: lines = f.readlines() for line in lines: for c in line.split(): if c.isdigit() == True: vector.append(int(c)) if len(vector) > 1000000 or vector.count(vector[0]) == len(vector): print("Datele nu sunt comform restricțiilor impuse.") exit() for x in vector: if x < 0 or x > 1000: print("Datele nu sunt comform restricțiilor impuse.") exit() print("Datele sunt corecte.") return vector if __name__ == '__main__': vector = conform_restrictiilor() progresie(vector) </syntaxhighlight> ==Explicaţie cod== Funcția '''progresie(vector)''' primește un vector ca parametru și începe prin a deschide un fișier '''progresie3.out''' pentru a scrie rezultatul. Apoi, initializează două variabile ratie și '''r''' cu valoarea 0. Vectorul este sortat și apoi se parcurge prin el. Dacă două elemente consecutive sunt diferite, se calculează diferența dintre ele și se stochează în variabila '''ratie'''. De asemenea, valoarea acestei diferențe este stochează și în variabila '''r'''. Programul se oprește din parcurgerea vectorului la primul astfel de caz, deoarece nu mai este nevoie să verifice restul elementelor din vector. După ce '''r''' a fost calculat, se parcurge din nou vectorul, de data aceasta pentru a verifica dacă toate diferențele dintre elementele consecutive ale vectorului sunt egale cu '''r'''. Dacă acest lucru este adevărat pentru toate diferențele, programul scrie valoarea '''r''' în fișierul de ieșire '''progresie3.out'''. Dacă se găsește o diferență care nu este egală cu '''r''', programul afișează '''NU''' și se oprește prin apelul funcției '''exit()'''. Funcția '''conform_restrictiilor()''' primește ca input datele din fișierul '''progresie3.in''' și verifică dacă ele corespund restricțiilor impuse. Mai precis, datele din fișier trebuie să conțină între 2 și 1000000 de elemente și fiecare element trebuie să fie între 0 și 1000. De asemenea, toate elementele din '''vector''' trebuie să fie diferite. Dacă restricțiile nu sunt îndeplinite, programul afișează un mesaj corespunzător și se oprește prin apelul funcției '''exit()'''. În funcția '''main()''', se apelează mai întâi funcția '''conform_restrictiilor()''' pentru a verifica dacă datele din fișier sunt valide și pentru a obține vectorul de numere. Apoi, se apelează funcția '''progresie(vector)''' pentru a determina dacă vectorul este o progresie aritmetică și pentru a afișa diferența în fișierul de ieșire sau '''NU''', după caz.
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