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
2809 - Crescator 1
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 == Scrieți un program care citește un șir de cel mult '''10^6''' numere naturale din intervalul '''[0,10^9 ]''' ordonate crescător și determină cel mai mic număr din șir care apare de un număr impar de ori. Dacă în șir nu se află o astfel de valoare, se afișează mesajul '''nu exista'''. == Date de intrare == Fișierul de intrare '''crescator1.in''' conține cel mult '''10^6''' numere naturale din intervalul '''[0,10^9]''', ordonate crescător, separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de ieșire '''crescator1.out''' va conține pe prima linie cel mai mic număr din fișierul de intrare care apare de un număr impar de ori sau mesajul nu exista dacă în fișier nu se află o astfel de valoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.". == Restricţii şi precizări == *Proiectați un algoritm eficient din punctul de vedere al spațiului de memorie utilizat şi al timpului de executare: *se recomandă o soluție care să nu memoreze elementele șirului într-un tablou sau altă structură de date similară. == Exemple == ===Exemplul 1=== ; ''crescator1.in'' :5 5 8 8 8 8 20 20 20 34 54 54 65 65 65 ; ''Ecran'' : Datele sunt introduse corect. ; ''crescator1.out'' :20 === Exemplul 2 === ; ''crescator1.in'' :4 1 1 1 2 ; ''secventeneuniforme.out'' ; ''Ecran'' : Datele nu corespund restrictiilor impuse. :0 ===Exemplul 3=== ; ''crescator1.in'' :3 3 3 3 ; ''Ecran'' : Datele sunt introduse corect. ; ''crescator1.out'' :nu exista <br> == Rezolvare == <syntaxhighlight lang="python" line="1"> # 2809 - Crescator 1 def validare_date(sir): if len(sir) > 10 ** 6: return False for i in range(1, len(sir)): if sir[i] < sir[i - 1]: return False return True def numar_impar(sir): i = 0 while i < len(sir): j = i while j < len(sir) and sir[j] == sir[i]: j += 1 if (j - i) % 2 == 1: return sir[i] i = j return None if __name__ == '__main__': with open("crescator1.in") as fin: sir = [int(x) for x in fin.readline().split()] if validare_date(sir): rezultat = numar_impar(sir) with open("crescator1.out", "w") as fout: if rezultat is not None: fout.write(str(rezultat)) else: fout.write("nu exista") print("Datele introduse sunt corecte.") else: print("Datele nu corespund restricțiilor impuse.") </syntaxhighlight> ==Explicatie== Funcția validare_date(sir) verifică dacă datele din fișierul de intrare corespund restricțiilor impuse, adică lungimea șirului nu depășește 10^6 și toate numerele din șir sunt în ordine crescătoare. Dacă datele sunt valide, funcția returnează True, altfel returnează False. Funcția numar_impar(sir) primește un șir de numere și încearcă să găsească un număr impar care apare de un număr impar de ori în șir. Pentru a face acest lucru, funcția parcurge lista și caută fiecare secvență de numere consecutive egale. Dacă numărul de elemente din această secvență este impar, atunci numărul respectiv este găsit și funcția returnează acesta. Dacă nu există niciun număr care să apară de un număr impar de ori, funcția returnează None. În blocul if __name__ == '__main__': citim datele de intrare din fișierul "crescator1.in" și apoi verificăm dacă datele sunt valide folosind funcția validare_date(sir). Dacă datele nu sunt valide, se afișează un mesaj corespunzător și se oprește execuția programului. Dacă datele sunt valide, se apelează funcția numar_impar(sir) pentru a găsi un număr impar care apare de un număr impar de ori și se afișează mesajul "Datele introduse sunt corecte.". În plus, se scrie numărul găsit (dacă există) în fișierul de ieșire "crescator1.out". Dacă nu există niciun număr care să apară de un număr impar de ori, se scrie "nu exista" în fișierul de ieșire.
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