0515 - Sort SD
Cerința[edit | edit source]
Se dau n
numere naturale. Afișați aceste numere ordonate crescător după suma divizorilor. Dacă două numere au aceeași sumă a divizorilor, se va afișa mai întâi cel mai mic.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n
, iar apoi n
numere naturale.
Date de ieșire[edit | edit source]
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Pe următoarea linie se vor afișa cele n
numere în ordinea cerută.
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 1000
- cele
n
numere citite vor fi mai mici decât100.000.000
Exemplu 1[edit | edit source]
- Intrare
- 10
- 24 46 11 36 48 35 27 28 49 6
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 6 11 27 35 28 49 24 46 36 48
Exemplu 2[edit | edit source]
- Intrare
- -2
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 0515 - SortSD
def conditii(n, numere):
return len(numere) == n and \ 1 <= n <= 1_000 and \ all(nr < 100_000_000 for nr in numere)
def sort_sd(numere):
rezultat = sorted(numere, key=lambda x: (sum([i for i in range(1, x + 1) if x % i == 0]), x)) # cheia de sortare returneaza un tuplu de 2 elemente: # 1) suma divizorilor unui număr, SD(x) -> sum([i for i in range(1, x + 1) if x % i == 0] # 2) numărul în sine, x # Numerele sunt sortate după SD(x). Dacă două numere au aceeași SD, atunci sunt sortate după valoarea lor. print(" ".join([str(x) for x in rezultat]))
if __name__ == "__main__":
n = int(input()) numere = [int(x) for x in input().split()] if not conditii(n, numere): print("Datele de intrare nu corespund restricțiilor impuse.") else: print("Datele de intrare corespund restricțiilor impuse.") sort_sd(numere)
</syntaxhighlight>