0196 - Aranjamente

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citesc două numere naturale nenule n și k. Să se afişeze, în ordine lexicografică, aranjamentele de câte k elemente ale mulţimii {1,2,..,n}.

Date de intrare[edit | edit source]

Fişierul de intrare aranjamenteIN.txt conţine pe prima linie numerele n și k, separate printr-un spatiu.

Date de ieşire[edit | edit source]

Fişierul de ieşire aranjamenteOUT.txt va conţine pe fiecare linie câte k valori, separate prin câte un spaţiu, reprezentând elementele unei aranjări. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor".

Restricţii şi precizări[edit | edit source]

  • 0 < k < n < 9

Exemplul 1[edit | edit source]

aranjamenteIN.txt

4 2

aranjamenteOUT.txt

1 2 
1 3 
1 4 
2 1 
2 3 
2 4 
3 1 
3 2 
3 4 
4 1 
4 2 
4 3 

Exemplul 2[edit | edit source]

aranjamenteIN.txt

4 5

consola

Nu corespunde restricțiilor

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii(n, k):

   if not (0 < k < n < 9):
       print("Nu corespunde restricțiilor.")
       return False
   return True

def genereaza_aranjamente(n, k, aranjament_curent, numere_folosite, fisier_output):

   if len(aranjament_curent) == k:
       fisier_output.write(" ".join(map(str, aranjament_curent)) + "\n")
       return
   for i in range(1, n + 1):
       if i not in numere_folosite:
           numere_folosite.add(i)
           genereaza_aranjamente(n, k, aranjament_curent + [i], numere_folosite, fisier_output)
           numere_folosite.remove(i)

def main():

   # Citirea datelor de intrare din fișier
   with open("aranjamenteIN.txt", "r") as fisier_intrare:
       n, k = map(int, fisier_intrare.readline().split())
   # Verificarea restricțiilor
   if not verifica_restrictii(n, k):
       return
   # Deschiderea fișierului de ieșire pentru scriere
   with open("aranjamenteOUT.txt", "w") as fisier_iesire:
       # Inițializarea listei de elemente și a setului de numere folosite
       aranjament_curent = []
       numere_folosite = set()
       # Generarea aranjamentelor și scrierea lor în fișierul de ieșire
       genereaza_aranjamente(n, k, aranjament_curent, numere_folosite, fisier_iesire)

if __name__ == "__main__":

   main()

</syntaxhighlight>