0301 - Frecventa1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/301/frecventa1 -Frecventa1] ---- == Cerinţa == Se dau '''n''' numere naturale cu cel mult două cifre fiecare. Afişaţi valorile distincte în ordinea descrescătoare a numărului de apariţii. == Date de intrare == Fișierul de intrare '''frecventa1.in''' conţine pe prima linie numărul '''n'''; urmează cele '''n''' numere, dispuse pe mai multe linii şi separate prin spaţii. == Date de ieșire == Dacă datele sunt introduse corec...
 
mNo edit summary
Line 41: Line 41:


def frecventa(vector):
def frecventa(vector):
     f = open("puteri6.out", "w")
     f = open("frecventa1.out", "w")
     aparitii = [(i, vector[i]) for i in range(100) if vector[i] > 0]
     aparitii = [(i, vector[i]) for i in range(100) if vector[i] > 0]
     aparitii.sort(key=lambda x: x[1], reverse=True)
     aparitii.sort(key=lambda x: x[1], reverse=True)
Line 50: Line 50:
def conform_restrictiilor():
def conform_restrictiilor():
     vector = list()
     vector = list()
     with open('puteri6.in') as f:
     with open('frecventa1.in') as f:
         lines = f.readlines()
         lines = f.readlines()
         for line in lines:
         for line in lines:

Revision as of 19:00, 26 March 2023

Sursa: -Frecventa1


Cerinţa

Se dau n numere naturale cu cel mult două cifre fiecare. Afişaţi valorile distincte în ordinea descrescătoare a numărului de apariţii.

Date de intrare

Fișierul de intrare frecventa1.in conţine pe prima linie numărul n; urmează cele n numere, dispuse pe mai multe linii şi separate prin spaţii.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieşire frecventa1.out va conţine pe prima linie valorile distincte dintre cele n, în ordinea descrescătoare a numărului de apariţii. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 100.000
  • dacă două valori apar de acelaşi număr de ori, se va afişa mai întâi valoarea mai mică

Exemple

Exemplul 1

frecventa1.in
8
3 19 3 65 3 19 14 3
Ieșire
Datele sunt corecte.
frecventa1.out
3 19 14 65

Exemplul 2

frecventa1.in
4
10 10 1 12
Ieșire
Datele sunt corecte.
frecventa1.out
10 1 12

Exemplul 3

frecventa1.in
5
22241 12 1234 12 236
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0301 Frecventa1

def frecventa(vector):

   f = open("frecventa1.out", "w")
   aparitii = [(i, vector[i]) for i in range(100) if vector[i] > 0]
   aparitii.sort(key=lambda x: x[1], reverse=True)
   for i in range(len(aparitii)):
       f.write(str(aparitii[i][0]) + " ")


def conform_restrictiilor():

   vector = list()
   with open('frecventa1.in') as f:
       lines = f.readlines()
       for line in lines:
           for c in line.split():
               if c.isdigit() is True:
                   vector.append(int(c))
   n = vector[0]
   vector_aparitii = [0] * 100
   if numar < 1 or numar > 100000:
       print("Datele nu sunt comform restricțiilor impuse.")
       exit()
   vector = vector[1:]
   for x in vector:
       if x < 0 or x >= 100:
           print("Datele nu sunt comform restricțiilor impuse.")
           exit()
       vector_aparitii[x] += 1
   print("Datele sunt corecte.")
   return vector_aparitii


if __name__ == '__main__':

   vector = conform_restrictiilor()
   frecventa(vector)


</syntaxhighlight>