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
2363 - Joc 8
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/2363/joc8] ---- == Cerinţa == Elena și Maria au primit cadou un joc. Dintr-o cutie ce conține mai multe numere, fiecare extrage pe rand câte un număr și trebuie să descopere anumite condiții îndeplinite de aceste numere. Ele vor să determine câte numere alternante au fost extrase. Un număr este alternant dacă are număr impar de cifre și dacă orice cifră a numărului, cu excepția primei și a ultimei cifre se învecinează fie cu două cifre mai mari decât ea, fie cu două cifre mai mici decât ea.<br><br>Cunoscând numărul '''n''' de numere, precum şi cele '''n''' numere naturale extrase din cutie determinați câte dintre acestea au fost alternante. == Date de intrare == Fișierul de intrare '''joc8.in''' conţine pe prima linie numărul '''n''' de numere naturale, iar pe următoarea linie cele '''n''' numere naturale. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi fișierul de ieșire '''joc8.out''' va conţine pe prima linie un număr ce reprezintă numărul numerelor alternante citite.În caz contrar, pe ecran se va afișa: '''"Datele nu au fost introduse corect."''' == Restricţii şi precizări == * '''1 < n < 1000000'''. * cele '''n''' numere din joc au cel mult nouă cifre fiecare. == Exemple == ; joc8.in : 10 : 193 7 721 14263 28 279 9 1523142 769 15752 ; Ecran : Datele sunt introduse corect. ; joc8.out : 6 == Rezolvare == <syntaxhighlight lang="python" line> # 2363 def verifica_datele(n, numere): # Verifică dacă n este un număr întreg pozitiv mai mic decât 1000000 if not isinstance(n, int) or n < 1 or n > 1000000: return False # Verifică dacă există exact n numere în listă și dacă fiecare număr are cel mult nouă cifre if len(numere) != n or not all(isinstance(nr, int) and 0 <= nr <= 999999999 for nr in numere): return False return True def rezolva_problema(n, numere): numere_alternante = 0 for nr in numere: nr_str = str(nr) nrcif = len(nr_str) if nrcif % 2 == 0 or nrcif == 1: continue alternant = True for i in range(1, nrcif - 1): if abs(int(nr_str[i]) - int(nr_str[i - 1])) != 2 or abs(int(nr_str[i]) - int(nr_str[i + 1])) != 2: alternant = False break if alternant: numere_alternante += 1 return numere_alternante if __name__ == "__main__": with open("joc8.in", "r") as f: n = int(f.readline().strip()) numere = list(map(int, f.readline().strip().split())) if verifica_datele(n, numere): print("Datele sunt introduse corect.") rezultat = rezolva_problema(n, numere) with open("joc8.out", "w") as f: f.write(str(rezultat) + "\n") else: print("Datele nu au fost introduse corect.") </syntaxhighlight> == Explicație rezolvare == Funcția '''verifica_datele(n, numere)''' verifică dacă datele citite din fișierul de intrare sunt corecte, respectând restricțiile impuse de problemă. Ea primește numărul '''n''' de numere naturale citite din fișier și lista numere conținând aceste numere și returnează True dacă datele sunt introduse corect și False în caz contrar. Mai precis, ea verifică dacă n este un număr întreg pozitiv mai mic decât 1000000 și dacă lista de numere are exact '''n''' elemente, fiecare fiind un număr natural cu cel mult nouă cifre.<br><br>Funcția '''rezolva_problema(n, numere)''' primește aceleași date ca și funcția anterioară și calculează numărul de numere alternante din lista numere. O valoare este considerată alternantă dacă are număr impar de cifre și dacă orice cifră a numărului, cu excepția primei și a ultimei cifre, se învecinează fie cu două cifre mai mari decât ea, fie cu două cifre mai mici decât ea. Funcția parcurge toate numerele din lista numere, verifică dacă fiecare dintre ele este alternant și în caz afirmativ, crește cu 1 un contor pentru numerele alternante găsite.<br><br>În funcția principală main, se deschide fișierul de intrare '''"joc8.in"''', se citesc datele și se verifică dacă sunt introduse corect apelând funcția verifica_datele(n, numere). Dacă această funcție returnează True, se afișează un mesaj corespunzător și se calculează numărul de numere alternante apelând funcția rezolva_problema(n, numere). Acest număr se scrie în fișierul de ieșire '''"joc8.out"'''. În caz contrar, se afișează un alt mesaj corespunzător.
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