0605 - CRB

From Bitnami MediaWiki
Revision as of 11:42, 12 December 2023 by Zmicala Narcis (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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 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

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

  • 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

crbin.txt
7
1 8 2 6 4 7 9
crbout.txt
Datele introduse corespund restricțiilor impuse.
3

Explicație

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

<syntaxhighlight lang="python" line>

  1. 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>