0125 - Permutari2

De la Universitas MediaWiki

Cerinţa

Se citeşte un număr natural nenul n, apoi n numere naturale distincte. Să se afişeze, în ordine lexicografică, permutările mulţimii formate din cele n numere citite.

Date de intrare

Fişierul de intrare permutari2IN.txt conţine pe prima linie numărul n, ia r pe a doua linie n numere naturale.

Date de ieşire

Fişierul de ieşire permutari2OUT.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
  • cele n numere de pe a doua linie a fişierului de intrare sunt mai mici decât 100

Exemplu:

permutari2IN.txt

3
4 7 3

permutari2OUT.txt

3 4 7 
3 7 4 
4 3 7 
4 7 3 
7 3 4 
7 4 3 

Exemplul 2

permutari2IN.txt

10
4 7 3

consola:

Eroare: Numărul n trebuie să fie între 0 și 9.

Rezolvare

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

    if len(numere) != n or len(set(numere)) != n or any(x >= 100 for x in numere):
        print("Eroare: Introduceți n numere naturale distincte mai mici decât 100.")
        return False

    return True

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

    for numar in sorted(numere):
        if numar not in current_permutation:
            generate_permutations(n, current_permutation + [numar], numere, output_file)

def main():
    with open("permutari2IN.txt", "r") as f:
        n = int(f.readline())
        numere = list(map(int, f.readline().split()))

    if verifica_restrictii(n, numere):
        with open("permutari2OUT.txt", "w") as output_file:
            generate_permutations(n, [], numere, output_file)

if __name__ == "__main__":
    main()