3902 - Sort Sum
Cerința[edit | edit source]
Scrie un program care citind un șir de numere naturale afișează numerele citite ordonate crescător după suma cifrelor lor, iar dacă suma cifrelor este egală, descrescător după valoarea lor.
Date de intrare[edit | edit source]
Fișierul de intrare sortsum.in
conține pe prima linie numere naturale separate prin spații.
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 numerele ordonate conform cerinței.
Î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]
- în fișier vor fi mai puțin de
1.000.000
de numere
- numerele din fișierul de intrare vor fi mai mici decât
10.000.000
Exemplu 1[edit | edit source]
- Intrare
- 102 60 51 600 21 3
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 102 21 3 600 60 51
Exemplu 2[edit | edit source]
- Intrare
- 10516212154212 651621215516212150 5162121551 60516212150 2605116051 605160513
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 3902 - Sort Sum
def conditii(numere):
return len(numere) < 1_000_000 and \ all(nr < 100_000_000 for nr in numere)
def sort_sum(numere):
rezultat = sorted(numere, key=lambda numar: (sum([int(cifra) for cifra in str(numar)]), -numar)) # cheia de sortare returneaza un tuplu de 2 elemente: # 1) suma cifrelor unui număr, SCif(numar) -> sum([int(cifra) for cifra in str(numar)]) # 2) numărul în sine, dar negat -> -numar # Numerele sunt sortate după SCif(x). Dacă două numere au aceeași SCif, atunci sunt sortate după valoarea lor negată. # Negăm numărul pentru a-l sorta descrescător. print(" ".join([str(x) for x in rezultat]))
if __name__ == "__main__":
numere = [int(x) for x in input().split()] if not conditii(numere): print("Datele de intrare nu corespund restricțiilor impuse.") else: print("Datele de intrare corespund restricțiilor impuse.") sort_sum(numere)
</syntaxhighlight>