0124 - Permutari1

De la Universitas MediaWiki

Cerinţa

Se citeşte un număr natural nenul n. Să se afişeze, în ordine invers lexicografică, permutările mulţimii {1,2,..,n}.

Date de intrare

Fişierul de intrare permutari1IN.txt conţine pe prima linie numărul n.

Date de ieşire

Fişierul de ieşire permutari1OUT.txt va conţine pe fiecare linie elementele unei permutări, separate prin câte un spaţiu.

Restricţii şi precizări

  • 0 < n < 9

Exemplul 1

permutari1IN.txt

3

permutari1OUT.txt

3 2 1 
3 1 2 
2 3 1 
2 1 3 
1 3 2 
1 2 3 

Exemplul 2

permutari1IN.txt

10

consola

Eroare: Numărul n trebuie să fie în intervalul (0, 9).

Rezolvare

def verifica_restrictii(n):
    if not (0 < n < 9):
        print("Eroare: Numărul n trebuie să fie în intervalul (0, 9).")
        return False
    return True

def generate_permutations(n, current_permutation, output_file):
    if len(current_permutation) == n:
        output_file.write(" ".join(map(str, current_permutation[::-1])) + "\n")
        return

    for i in range(1, n + 1):
        if i not in current_permutation:
            generate_permutations(n, current_permutation + [i], output_file)

def main():
    with open("permutari1IN.txt", "r") as f:
        linie = f.readline().strip()
        if not linie:
            print("Eroare: Fișierul de intrare este gol sau conține doar linii goale.")
            return

        try:
            n = int(linie)
        except ValueError:
            print("Eroare: Numărul n nu poate fi convertit la întreg. Asigurați-vă că fișierul de intrare este formatat corect.")
            return

    if not verifica_restrictii(n):
        return

    with open("permutari1OUT.txt", "w") as output_file:
        generate_permutations(n, [], output_file)

if __name__ == "__main__":
    main()