0533 - Aliniere: Diferență între versiuni

De la Universitas MediaWiki
(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...)
 
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 19: Linia 19:
:B 179
:B 179
; Ieșire
; Ieșire
:Datele de intrare corespund restrictiilor impuse
: 4 5 1 3 2
: 4 5 1 3 2
<br>
== Exemplu 2 ==
; Intrare
:5
:B 176
:F 250
:F 165
:B 180
:B 179
; Ieșire
:Datele de intrare nu corespund restrictiilor impuse
== Rezolvare ==
== Rezolvare ==


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def rearrange_array(n, arr):
 
     # Sortăm vectorul în ordine crescătoare
def validare(numar, elev): # functia de validare a datelor de intrare
     arr.sort()
 
def elevi_ordonati(n, elevi):
     if len(elev) != numar:
        raise ValueError
 
    if numar > 100:
        raise ValueError
 
    for gender, height in elev:
        if gender not in ['B', 'F'] or not isinstance(height, int) or height < 1 or height > 200:
            raise ValueError
 
     print("Datele de intrare corespund restrictiilor impuse")
 
 
def elevi_ordonati(numar, elev): # functia de rezolvare
     # Separăm elevii în două liste: băieți și fete
     # Separăm elevii în două liste: băieți și fete
     baieti = []
     baieti = []
     fete = []
     fete = []


     for i in range(n):
     for nr in range(numar):
         sex, inaltime = elevi[i]
         sexul, height = elev[nr]
         if sex == "B":
         if sexul == "B":
             baieti.append((i + 1, inaltime))
             baieti.append((nr + 1, height))
         else:
         else:
             fete.append((i + 1, inaltime))
             fete.append((nr + 1, height))


     # Sortăm listele în ordine descrescătoare a înălțimii
     # Sortăm listele în ordine descrescătoare a înălțimii
Linia 43: Linia 69:


     # Concatenăm listele băieților și fetelor
     # Concatenăm listele băieților și fetelor
     elevi_ordonati = baieti + fete
     eleviordonati = baieti + fete
 
    return [elev[0] for elev in eleviordonati]
 
 
if __name__ == '__main__':
 
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        n = int(input("Introduceți numărul n: "))
        elevi = []


    return [elev[0] for elev in elevi_ordonati]
        for i in range(n):
            sex, inaltime = input().split()
            elevi.append((sex, int(inaltime)))


if __name__ == "__main__":
        validare(n, elevi)  # apelul functiei de validare
    n = int(input("Introduceți numărul n: "))
        result = elevi_ordonati(n, elevi)  # apelul functiei de rezolvare
    elevi = []
        print(" ".join(map(str, result)))


     for i in range(n):
     except ValueError:
         sex, inaltime = input().split()
         print("Datele de intrare nu corespund restrictiilor impuse")
         elevi.append((sex, int(inaltime)))
    except IndexError:
         print("Datele de intrare nu corespund restrictiilor impuse")


    result = elevi_ordonati(n, elevi)
    print(" ".join(map(str, result)))


</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 12 noiembrie 2023 07:39

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
Datele de intrare corespund restrictiilor impuse
4 5 1 3 2


Exemplu 2

Intrare
5
B 176
F 250
F 165
B 180
B 179
Ieșire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

def validare(numar, elev):  # functia de validare a datelor de intrare

    if len(elev) != numar:
        raise ValueError

    if numar > 100:
        raise ValueError

    for gender, height in elev:
        if gender not in ['B', 'F'] or not isinstance(height, int) or height < 1 or height > 200:
            raise ValueError

    print("Datele de intrare corespund restrictiilor impuse")


def elevi_ordonati(numar, elev):  # functia de rezolvare
    # Separăm elevii în două liste: băieți și fete
    baieti = []
    fete = []

    for nr in range(numar):
        sexul, height = elev[nr]
        if sexul == "B":
            baieti.append((nr + 1, height))
        else:
            fete.append((nr + 1, height))

    # 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
    eleviordonati = baieti + fete

    return [elev[0] for elev in eleviordonati]


if __name__ == '__main__':

    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        n = int(input("Introduceți numărul n: "))
        elevi = []

        for i in range(n):
            sex, inaltime = input().split()
            elevi.append((sex, int(inaltime)))

        validare(n, elevi)  # apelul functiei de validare
        result = elevi_ordonati(n, elevi)  # apelul functiei de rezolvare
        print(" ".join(map(str, result)))

    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse")