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
1875 - Platou 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!
Sursă: [https://www.pbinfo.ro/probleme/1875/platou1] == Cerinţa == Se consideră un șir de cifre. Să se determine lungimea maximală a unei secvențe din șir formată din cifre egale. == Date de intrare == Fișierul de intrare '''platou1.in''' conține pe prima linie cifrele reprezentând termenii șirului, separate prin câte un spațiu. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fișierul de ieșire '''platou1.out''' va conține pe prima linie două numere naturale '''k x''', separate printr-un singur spațiu, '''k''' reprezentând lungimea secvenței determinate, iar '''x''' reprezentând termenul șirului din care este formată secvența. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.". == Restricții și precizări == * fișierul de intrare conține cel mult '''1.000''' de cifre, separate prin câte un spațiu, reprezentând termenii șirului dat; * dacă șirul conține mai multe secvențe cu lungimea maximală, se va afișa cel mai mic termen ce formează o astfel de secvență. == Exemple == === Exemplu 1 === ; '''platou1.in''' : 3 8 8 8 8 9 9 9 2 5 5 5 5 7 6 6 6 6 8 8 ; '''platou1.out'' : 4 5 ==== Explicatie ==== În fișierul de intrare sunt 3 secvențe cu lungimea maximă k=4, termenul cel mai mic fiind x=5. ==Rezolvare== <syntaxhighlight lang="python" line="1"> def verificare(): numere = [] with open('platou1.in', 'r') as fin: while True: numar = fin.readline().strip() if not numar: break try: numar = int(numar) if numar == 0: break elif numar > 0 and numar < 1000: print("Datele sunt corecte.") numere.append(numar) else: print("Datele nu sunt conform restricțiilor impuse.") except ValueError: print("Trebuie respectate cerintele.") return numere def platou1(numere): with open('platou1.out', 'w') as fout: xmin = 10 k = 0 lg = 1 x = numere[0] for y in numere[1:]: if x == y: lg += 1 else: if k < lg: k = lg xmin = x elif k == lg and xmin > x: xmin = x lg = 1 x = y with open('platou1.out', 'w') as fout: fout.write(f"{k} {xmin}\n") if _name_ == '_main_': numere = verificare() platou1(numere) </syntaxhighlight> == Explicații == Acest cod este scris în limbajul Python și constă din două funcții, verificare() și platou1(), și o secțiune if _name_ == '_main_'. Scopul programului este de a găsi cea mai lungă secvență consecutivă de numere identice dintr-o listă de numere citită dintr-un fișier și de a afișa lungimea acelei secvențe și cel mai mic număr din acea secvență. Funcția verificare() primește datele de intrare din fișierul "platou1.in". Fiecare linie este citită și verificată dacă poate fi convertită într-un număr întreg. Numerele întregi pozitive mai mici decât 1000 sunt adăugate într-o listă numere, în timp ce numerele care nu îndeplinesc această cerință sunt ignorate. Dacă se întâlnește numărul zero, citirea se oprește și lista numere este returnată. Funcția platou1() primește lista numere și deschide fișierul "platou1.out" pentru a scrie rezultatul. Folosind o buclă for, funcția compară fiecare element din listă cu elementul anterior. Dacă cele două elemente sunt identice, variabila lg este incrementată. Dacă nu sunt identice, variabila k este actualizată cu lungimea maximă de până acum a secvenței și variabila xmin este actualizată cu cel mai mic număr din secvența curentă dacă aceasta are aceeași lungime ca și secvența maximă până în acel moment. Lungimea secvenței curente este resetată la 1 și se trece la următorul număr din listă. La final, funcția deschide fișierul "platou1.out" și scrie rezultatul sub formă de linie unică, care conține lungimea secvenței maxime și cel mai mic număr din acea secvență. Secțiunea if _name_ == '_main_' verifică dacă acest script este rulat direct sau este importat ca modul în altă parte. Dacă este rulat direct, funcția verificare() este apelată pentru a citi datele din fișier și a construi lista de numere, iar apoi funcția platou1() este apelată cu această listă pentru a calcula și scrie rezultatul în fișierul "platou1.out".
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