0183 - Sort PP

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

Să se ordoneze crescător elementele pătrat perfect ale unui şir dat, fără a afecta elementele care nu sunt pătrat perfect.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii, reprezentând elementele vectorului.

Date de ieșire

Programul afișează pe ecran, separate prin spaţii, cele n elemente ale vectorului, după sortare.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 50000

Exemplul 1

Intrare
8
9 15 16 4 5 1 7 9
Ieșire
Datele de intrare corespund restricțiilor impuse.
1 15 4 9 5 9 7 16

Exemplul 2

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

Rezolvare

def patrat_perfect(num):
    # verifică dacă un număr este pătrat perfect
    return int(num ** 0.5) ** 2 == num

def sorteaza_sir(lst):
    # ordonează crescător elementele pătrat perfect dintr-un șir
    sir = []
    alte = []
    for num in lst:
        if patrat_perfect(num):
            sir.append(num)
        else:
            alte.append(num)
    sir.sort()
    rezultat = []
    for num in lst:
        if patrat_perfect(num):
            rezultat.append(sir.pop(0))
        else:
            rezultat.append(num)
    return rezultat


if __name__ == '__main__':
    # citirea datelor de intrare
    n = int(input())
    lst = list(map(int, input().split()))
    
    # verificarea restricțiilor impuse
    if n >= 1 and n <= 1000 and max(lst) < 50000:
        rezultat = sorteaza_sir(lst)
        print(*rezultat)
        print("Datele de intrare corespund restricțiilor impuse.")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")