0130 - Sort Cif

From Bitnami MediaWiki
Revision as of 06:41, 7 May 2023 by Ardelean Alexandru (talk | contribs) (Pagină nouă: ==Cerința== Se dă un vector cu <code>n</code> elemente numere întregi. Să se ordoneze crescător elementele unui vector crescător după suma cifrelor. ==Date de intrare== Fişierul de intrare <code>sortcif.in</code> conţine pe prima linie numărul <code>n</code> si pe a doua linie <code>n</code> numere întregi separate prin spaţii. ==Date de ieșire== Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." Pe următoarea linie se vor afi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Se dă un vector cu n elemente numere întregi.

Să se ordoneze crescător elementele unui vector crescător după suma cifrelor.

Date de intrare[edit | edit source]

Fişierul de intrare sortcif.in conţine pe prima linie numărul n si pe a doua linie n numere întregi 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 cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

Î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]

  • 0 < n ≤ 100
  • valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 230.

Exemplu 1[edit | edit source]

Intrare
6
89 22 91 4005 51 721
Ieșire
Datele de intrare corespund restricțiilor impuse.
22 51 4005 91 721 89

Exemplu 2[edit | edit source]

Intrare
-2
89 22 91 4005 51 721
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 0130 Sort Cif

def conditii(n, numere):

   return len(numere) == n and \
       0 < n <= 1000 and \
       all(abs(nr) < 2**30 for nr in numere)


def sort_cif(numere):

   rezultat = sorted(numere, key=lambda numar: sum([int(cifra) for cifra in str(numar)]))
   # cheia de sortare returneaza suma cifrelor unui număr, SCif(numar) -> sum([int(cifra) for cifra in str(numar)])
   # Numerele sunt sortate după SCif(x)
   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_cif(numere)

</syntaxhighlight>