0183 - Sort PP

De la Universitas MediaWiki

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.")