0605 - CRB: Difference between revisions
Pagină nouă: == Cerinţa == CRB are un șir cu '''n''' numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare. Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte elemente din șir respectă această regulă. == Date de intrare == Fișierul de intrare '''crb.in''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale separate prin spații, rep... |
No edit summary |
||
Line 2: | Line 2: | ||
CRB are un șir cu '''n''' numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare. Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte elemente din șir respectă această regulă. | CRB are un șir cu '''n''' numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare. Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte elemente din șir respectă această regulă. | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare ''' | Fișierul de intrare '''crbin.txt''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale separate prin spații, reprezentând elementele șirului inițial. | ||
== Date de ieşire == | == Date de ieşire == | ||
Fișierul de ieșire ''' | Fișierul de ieșire '''crbout.txt''' va conține pe prima linie numărul '''C''', reprezentând numărul de elemente care ocupă aceeași poziție în șirul inițial și în cel sortat. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''1 ≤ n ≤ 1000''' | * '''1 ≤ n ≤ 1000''' | ||
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât '''1.000.000''' | * numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât '''1.000.000''' | ||
== | == Exemplul 1 == | ||
; | ; crbin.txt | ||
: 7 | : 7 | ||
: 1 8 2 6 4 7 9 | : 1 8 2 6 4 7 9 | ||
; | ; crbout.txt | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 3 | : 3 | ||
== Explicație == | == Explicație == | ||
Cele trei elemente sunt '''8''', '''6''' și '''4'''. | Cele trei elemente sunt '''8''', '''6''' și '''4'''. | ||
== Exemplul 2 == | |||
; crbin.txt | |||
: 5 | |||
: 1 2 3 4 1000000 | |||
; crbout.txt | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | # 0605 - CRB | ||
def validare(sir): # functia de validare a datelor de intrare | |||
if len(sir) > 1000: | |||
raise ValueError | |||
for numar in sir: | |||
if not isinstance(numar, int) or numar >= 1_000_000: | |||
raise ValueError | |||
fisier_iesire.write("Datele de intrare corespund restrictiilor impuse\n") | |||
if __name__ == | def numar_elemente(sir): # functia de rezolvare | ||
sir_sortat = sorted(sir, reverse=True) | |||
numar_elemente_identice = sum(1 for i in range(len(sir)) if sir[i] == sir_sortat[i]) | |||
fisier_iesire.write(str(numar_elemente_identice)) | |||
if __name__ == '__main__': | |||
fisier_intrare = open("crbin.txt", "r") # declararea fisierelor | |||
fisier_iesire = open("crbout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write) | |||
try: | |||
n = int(fisier_intrare.readline()) # citirea numarului se face ca sir de caractere deoarece e prea mare | |||
sir_initial = [int(numar) for numar in fisier_intrare.readline().split()] | |||
validare(sir_initial) # apelul functiei de validare | |||
numar_elemente(sir_initial) # apelul functiei de rezolvare | |||
except ValueError: | |||
fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 11:42, 12 December 2023
Cerinţa[edit | edit source]
CRB are un șir cu n numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare. Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte elemente din șir respectă această regulă.
Date de intrare[edit | edit source]
Fișierul de intrare crbin.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații, reprezentând elementele șirului inițial.
Date de ieşire[edit | edit source]
Fișierul de ieșire crbout.txt va conține pe prima linie numărul C, reprezentând numărul de elemente care ocupă aceeași poziție în șirul inițial și în cel sortat.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 1000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000
Exemplul 1[edit | edit source]
- crbin.txt
- 7
- 1 8 2 6 4 7 9
- crbout.txt
- Datele introduse corespund restricțiilor impuse.
- 3
Explicație[edit | edit source]
Cele trei elemente sunt 8, 6 și 4.
Exemplul 2[edit | edit source]
- crbin.txt
- 5
- 1 2 3 4 1000000
- crbout.txt
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 0605 - CRB
def validare(sir): # functia de validare a datelor de intrare
if len(sir) > 1000: raise ValueError
for numar in sir: if not isinstance(numar, int) or numar >= 1_000_000: raise ValueError
fisier_iesire.write("Datele de intrare corespund restrictiilor impuse\n")
def numar_elemente(sir): # functia de rezolvare
sir_sortat = sorted(sir, reverse=True)
numar_elemente_identice = sum(1 for i in range(len(sir)) if sir[i] == sir_sortat[i])
fisier_iesire.write(str(numar_elemente_identice))
if __name__ == '__main__':
fisier_intrare = open("crbin.txt", "r") # declararea fisierelor fisier_iesire = open("crbout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
try: n = int(fisier_intrare.readline()) # citirea numarului se face ca sir de caractere deoarece e prea mare sir_initial = [int(numar) for numar in fisier_intrare.readline().split()]
validare(sir_initial) # apelul functiei de validare numar_elemente(sir_initial) # apelul functiei de rezolvare
except ValueError: fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>