0196 - Aranjamente
Cerinţa
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
Fişierul de intrare aranjamenteIN.txt
conţine pe prima linie numerele n
și k
, separate printr-un spatiu.
Date de ieşire
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
0 < k < n < 9
Exemplul 1
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
aranjamenteIN.txt
4 5
consola
Nu corespunde restricțiilor
Rezolvare
<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>