0533 - Aliniere

From Bitnami MediaWiki
Revision as of 17:06, 24 October 2023 by Ghisa Catalin (talk | contribs) (Pagină nouă: == Cerinţa == La ora de educație fizică participă n elevi, numerotați de la '''1''' la '''n''', băieți și fete, pentru fiecare dintre ei cunoscându-se înălțimea, exprimată în centimetri. Profesorul le cere să se alinieze, mai întâi băieții, în ordine descrescătoare a înălțimii, apoi fetele, de asemenea în ordine descrescătoare. Afișați numerele de ordine ale elevilor în ordinea dorită de profesor. Dacă doi băieți (sau fete) au aceeași înăl...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

La ora de educație fizică participă n elevi, numerotați de la 1 la n, băieți și fete, pentru fiecare dintre ei cunoscându-se înălțimea, exprimată în centimetri. Profesorul le cere să se alinieze, mai întâi băieții, în ordine descrescătoare a înălțimii, apoi fetele, de asemenea în ordine descrescătoare.

Afișați numerele de ordine ale elevilor în ordinea dorită de profesor. Dacă doi băieți (sau fete) au aceeași înălțime, se va afișa mai întâi elevul cu numărul de ordine mai mic.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n caracteristicile celor n elevi, astfel: o literă (B sau F), care definește sexul elevului, și înălțimea acestuia, un număr natural nenul.

Date de ieşire

Programul va afișa pe ecran numerele de ordine ale elevilor în ordinea dorită de profesor, separate prin exact un spațiu.

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • înălțimile elevilor vor fi mai mici decât 200

Exemplu

Intrare
5
B 176
F 160
F 165
B 180
B 179
Ieșire
4 5 1 3 2

Rezolvare

<syntaxhighlight lang="python" line> def rearrange_array(n, arr):

   # Sortăm vectorul în ordine crescătoare
   arr.sort()

def elevi_ordonati(n, elevi):

   # Separăm elevii în două liste: băieți și fete
   baieti = []
   fete = []
   for i in range(n):
       sex, inaltime = elevi[i]
       if sex == "B":
           baieti.append((i + 1, inaltime))
       else:
           fete.append((i + 1, inaltime))
   # Sortăm listele în ordine descrescătoare a înălțimii
   baieti.sort(key=lambda x: (-x[1], x[0]))
   fete.sort(key=lambda x: (-x[1], x[0]))
   # Concatenăm listele băieților și fetelor
   elevi_ordonati = baieti + fete
   return [elev[0] for elev in elevi_ordonati]

if __name__ == "__main__":

   n = int(input("Introduceți numărul n: "))
   elevi = []
   for i in range(n):
       sex, inaltime = input().split()
       elevi.append((sex, int(inaltime)))
   result = elevi_ordonati(n, elevi)
   print(" ".join(map(str, result)))

</syntaxhighlight>