0125 - Permutari2

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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()