1608 - Sortare Divizori: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale nenule. Ordonați descrescător cele '''n''' numere după numărul lor de divizori. == Date de intrare == Fișierul de intrare '''sortare_divizori.in''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale nenule separate prin câte un spațiu. == Date de ieșire == Fișierul de ieșire '''sortare_divizori.out''' va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate de...
 
No edit summary
Line 2: Line 2:
Se dau '''n''' numere naturale nenule. Ordonați descrescător cele '''n''' numere după numărul lor de divizori.
Se dau '''n''' numere naturale nenule. Ordonați descrescător cele '''n''' numere după numărul lor de divizori.
== Date de intrare ==
== Date de intrare ==
Fișierul de intrare '''sortare_divizori.in''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale nenule separate prin câte un spațiu.
Fișierul de intrare '''sortare_divizoriin.txt''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale nenule separate prin câte un spațiu.
== Date de ieșire ==  
== Date de ieșire ==  
Fișierul de ieșire '''sortare_divizori.out''' va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.
Fișierul de ieșire '''sortare_divizoriout.txt''' va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ≤ '''n''' ⩽ 1.000
* 1 ≤ '''n''' ⩽ 1.000
Line 12: Line 12:


== Exemplu 1 ==
== Exemplu 1 ==
; sortare_divizori.in
; sortare_divizoriin.txt
: 5
: 5
: 12 20 4 100 13
: 12 20 4 100 13
;sortare_divizori.out
;sortare_divizoriout.txt
: 100 12 20 4 13
: 100 12 20 4 13
<br>
<br>

Revision as of 18:59, 10 January 2024

Cerinţa

Se dau n numere naturale nenule. Ordonați descrescător cele n numere după numărul lor de divizori.

Date de intrare

Fișierul de intrare sortare_divizoriin.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire sortare_divizoriout.txt va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.

Restricţii şi precizări

  • 1 ≤ n ⩽ 1.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
  • dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător


Exemplu 1

sortare_divizoriin.txt
5
12 20 4 100 13
sortare_divizoriout.txt
100 12 20 4 13


Rezolvare

<syntaxhighlight lang="python" line>

def numar_divizori(numar):
   divizori = 0
   for i in range(1, numar + 1):
       if numar % i == 0:
           divizori += 1
   return divizori

if __name__ == "__main__":

   # Citim numărul n și lista de numere din fișierul de intrare
   with open("sortare_divizori.in", "r") as f:
       n = int(f.readline().strip())
       numere = list(map(int, f.readline().strip().split()))
   # Verificăm restricțiile impuse pentru numere
   numere = [numar for numar in numere if numar < 1000000000]
   # Calculăm numărul de divizori pentru fiecare număr și sortăm numerele în ordine descrescătoare după numărul de divizori,
   # iar în caz de egalitate, sortăm crescător
   numere.sort(key=lambda x: (numar_divizori(x), -x), reverse=True)
   # Scriem rezultatul în fișierul de ieșire
   with open("sortare_divizori.out", "w") as f:
       for numar in numere:
           f.write(str(numar) + " ")

</syntaxhighlight>

Explicație

12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și 20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.