2594 - Partionare

De la Universitas MediaWiki

Cerința

Se citește un număr natural n și un șir de n numere întregi. Să se aranjeze elementele astfel încât în prima parte a șirului să fie valorile pare în ordine crescătoare, iar în partea a doua valorile impare, de asemenea în ordine crescătoare.

Date de intrare

Programul citește de la tastatură numărul n și apoi cele n elemente ale șirului.

Date de ieșire

Programul afișează pe ecran elementele șirului după prelucrare cu spații intre ele.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere pot fi reprezentate pe 32 de biți cu semn.

Exemplul 1

Intrare
10
5 4 3 2 1 6 7 8 9 18
Ieșire
Datele de intrare corespund restricțiilor impuse.
2 4 6 8 18 1 3 5 7 9

Exemplul 2

Intrare
0
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#2594 - Partitionare
def sort_pare_impare(lista):
    pare = []  # creăm o listă goală, pentru numerele pare
    impare = []  # a doua listă goală, pentru numerele impare

    # adăugăm fiecare număr în lista corespunzătoare
    for num in lista:
        if num % 2 == 0:
            pare.append(num)
        else:
            impare.append(num)

    pare.sort()  # sortăm lista de numere pare
    impare.sort()  # la fel lista de numere impare

    rezultat = pare + impare  # concatenăm cele două liste sortate

    return rezultat


if __name__ == "__main__":
    n = int(input("Introduceți numărul de elemente: "))
    lista = [int(num) for num in input("Introduceți șirul de numere: ").split()]

    # verificăm restricțiile
    if n < 1 or n > 1000 or any(num < -2147483648 or num > 2147483647 for num in lista):
        print("Datele de intrare nu corespund restricțiilor impuse.")
    else:
        print("Datele de intrare corespund restricțiilor impuse.")
        sorted_list = sort_pare_impare(lista)  # apelăm funcția de sortare
        print(" ".join(str(num) for num in sorted_list))  # afișăm lista sortată