0164 - Half Sort 2
Cerinţa[edit | edit source]
Se dă un vector cu n elemente numere întregi, n fiind număr par. Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare.
Date de intrare[edit | edit source]
Fişierul de intrare halfsort2in.txt conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.
Date de ieşire[edit | edit source]
Fişierul de ieşire halfsort2out.txt va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.
Restricții și precizări[edit | edit source]
- 0 < n ≤ 100
- valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 2^30
- indicii elementelor vectorului sunt 1,2,...,n
Exemplul 1[edit | edit source]
- halfsort2.in
- 6
- 8 9 9 4 5 7
- halfsort2.out
- Datele introduse corespund restricțiilor impuse.
- 9 4 8 7 5 9
Exemplul 2[edit | edit source]
- halfsort2in.txt
- 5
- 1 2 3 4 2**30
- halfsort2out.txt
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 0164 - Half Sort 2
def validare(numar_elemente, vector_intrare): # functia de validare a datelor de intrare
if numar_elemente > 100 or numar_elemente < 0: raise ValueError
for numar in vector_intrare: if abs(numar) >= 2 ** 30: # fiecare numar trebuie sa fie mai mic decat 2^30 raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def sorteaza_elemente(numar_elemente, vector_intrare): # functia de rezolvare
# Creăm două liste, una pentru elementele de pe poziții pare și una pentru cele de pe poziții impare pare = sorted(vector_intrare[i] for i in range(numar_elemente) if i % 2 != 0) impar = sorted((vector_intrare[i] for i in range(numar_elemente) if i % 2 == 0), reverse=True)
# Parcurgem vectorul și înlocuim fiecare element cu primul element din lista corespunzătoare for i in range(numar_elemente): if i % 2 == 0: vector_intrare[i] = impar.pop(0) else: vector_intrare[i] = pare.pop(0)
# Întoarcem vectorul modificat return vector_intrare
if __name__ == '__main__':
file_in = open("halfsort2in.txt", "r") # declararea fisierelor file_out = open("halfsort2out.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
# din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam try: n = int(file_in.readline()) # citirea numarului de elemente vector = list(map(int, file_in.readline().split())) # citirea vectorului
validare(n, vector) # apelul functiei de validare vector = sorteaza_elemente(n, vector) # apelul functiei de rezolvare file_out.write(' '.join(map(str, vector)) + '\n')
except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>