0131 - Sort Cif 2
De la Universitas MediaWiki
Se dă un vector cu n elemente numere întregi.
Cerinţa
Să se ordoneze crescător elementele unui vector crescător după prima cifră.
Date de intrare
Fişierul de intrare sortcif2in.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
Fişierul de ieşire sortcif2out.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
- 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
Exemplul 1
- sortcif2in.txt
6 89 2246 91 4005 51 721
- sortcif2out.txt
Datele de intrare corespund restrictiilor impuse 2246 4005 51 721 89 91
Exemplul 2
- sortcif2in.txt
-1 101
- sortcif2out.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(validare_cif, numere_validare):
# Verificăm dacă n este în intervalul 0-100
if validare_cif <= 0 or validare_cif > 100:
raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 0-100
for numar in numere_validare: # Parcurgem lista de numere
# Verificăm dacă valoarea absolută a numărului este mai mică decât 2^30
if abs(numar) >= 2**30:
raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
# Funcția sort_numbers sortează numerele în funcție de prima cifră
def sort_numbers(numere):
# Sortăm numerele în funcție de prima cifră
numere.sort(key=lambda x: int(str(abs(x))[0]))
return numere
if __name__ == '__main__':
file_in = open("sortcif2in.txt", "r")
file_out = open("sortcif2out.txt", "w")
try:
# Citim numărul de numere
n_main = int(file_in.readline())
# Citim numerele
numere_main = list(map(int, file_in.readline().split()))
# Validăm datele de intrare
validare(n_main, numere_main)
# Sortăm numerele în funcție de prima cifră
numere_sortate = sort_numbers(numere_main)
# Scriem numerele sortate în fișierul de ieșire
file_out.write(' '.join(map(str, numere_sortate)) + '\n')
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare
except ValueError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")
# Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare
except IndexError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")