1156 - InaltimiQ: Difference between revisions
Pagină nouă: == Cerinta == Se dau înălțimile a n copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor. Pentru sortare se va folosit metoda QuickSort sau MergeSort. == Date de intrare == Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor. == Date de iesire == Programul va afișa pe ecran... |
No edit summary |
||
Line 1: | Line 1: | ||
== Cerinta == | == Cerinta == | ||
Se dau înălțimile a n copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor. | Se dau înălțimile a '''n''' copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor. | ||
Pentru sortare se va folosit metoda QuickSort sau MergeSort. | Pentru sortare se va folosit metoda QuickSort sau MergeSort. | ||
Line 7: | Line 7: | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor. | Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor. | ||
== Date de iesire == | == Date de iesire == | ||
Line 15: | Line 15: | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *1 ⩽ n ⩽ 1000 | ||
*înălțimile copiilor vor fi numere naturale distincte din intervalul [1 , 10000] | *înălțimile copiilor vor fi numere naturale distincte din intervalul '''[1 , 10000]''' | ||
== Exemplul 1 == | == Exemplul 1 == | ||
Line 23: | Line 23: | ||
:8 20 16 14 10 4 12 | :8 20 16 14 10 4 12 | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
:6 1 5 7 4 3 2 | :6 1 5 7 4 3 2 | ||
Line 31: | Line 31: | ||
:-6 0 -10 25 | :-6 0 -10 25 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Revision as of 10:45, 27 December 2023
Cerinta
Se dau înălțimile a n copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor.
Pentru sortare se va folosit metoda QuickSort sau MergeSort.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor.
Date de iesire
Programul va afișa pe ecran n numere naturale distincte cuprinse între 1 și n, separate prin exact un spațiu, reprezentând numerele de ordine ale copiilor în ordinea crescătoare a înălțimii.
Restrictii si precizari
- 1 ⩽ n ⩽ 1000
- înălțimile copiilor vor fi numere naturale distincte din intervalul [1 , 10000]
Exemplul 1
- Intrare
- 7
- 8 20 16 14 10 4 12
- Iesire
- Datele introduse corespund restrictiilor impuse
- 6 1 5 7 4 3 2
Exemplul 2
- Intrare
- 4
- -6 0 -10 25
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def merge_sort(arr):
if len(arr) > 1: mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:]
merge_sort(left_half) merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half): if left_half[i] <= right_half[j]: arr[k] = left_half[i] i += 1 else: arr[k] = right_half[j] j += 1 k += 1
while i < len(left_half): arr[k] = left_half[i] i += 1 k += 1
while j < len(right_half): arr[k] = right_half[j] j += 1 k += 1
def afiseaza_ordinea_copiilor(n, inaltimi):
copii = list(range(1, n + 1)) merge_sort(inaltimi)
# Creează un dicționar pentru a ține legătura dintre înălțimi și numerele de ordine inaltimi_dict = dict(zip(inaltimi, copii))
# Afișează numerele de ordine ale copiilor în ordinea crescătoare a înălțimii for inaltime in inaltimi: print(inaltimi_dict[inaltime], end=" ")
- Citirea datelor de intrare
n = int(input("Introduceți numărul de copii: ")) inaltimi = list(map(int, input("Introduceți înălțimile copiilor separate prin spațiu: ").split()))
- Afișarea rezultatului
afiseaza_ordinea_copiilor(n, inaltimi)
</syntaxhighlight>