0196 - Aranjamente: Diferență între versiuni
De la Universitas MediaWiki
Gabii (discuție | contribuții) (Pagină nouă: = Cerinţa = Se citesc două numere naturale nenule <code>n</code> și <code>k</code>. Să se afişeze, în ordine lexicografică, aranjamentele de câte <code>k</code> elemente ale mulţimii <code>{1,2,..,n}</code>. = Date de intrare = Fişierul de intrare <code>aranjamenteIN.txt</code> conţine pe prima linie numerele <code>n</code> și <code>k</code>, separate printr-un spatiu. = Date de ieşire = Fişierul de ieşire <code>aranjamenteOUT.txt</code> va conţine pe fiecar...) |
|||
Linia 33: | Linia 33: | ||
4 5 | 4 5 | ||
consola | consola | ||
Nu corespunde restricțiilor | |||
== Rezolvare == | == Rezolvare == |
Versiunea curentă din 9 decembrie 2023 19:39
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
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()