0123 - Permutari: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 1: Linia 1:
Sursa: [https://www.pbinfo.ro/probleme/3976/prodimpare]
Sursa: [https://www.pbinfo.ro/probleme/3976/prodimpare]
==Cerinţa==
==Cerinţa==
Se citeşte un număr natural nenul n. Să se afişeze, în ordine lexicografică, permutările mulţimii {1,2,..,n}.
Se citeşte un număr natural nenul '''n'''. Să se afişeze, în ordine lexicografică, permutările mulţimii '''{1,2,..,n}'''.
==Date de intrare==
==Date de intrare==
Fişierul de intrare permutari.in conţine pe prima linie numărul n.
Fişierul de intrare permutari.in conţine pe prima linie numărul '''n'''.
==Date de iesire==
==Date de iesire==
Programul va afișa în fișierul permutari.in, mesajul "Datele introduse corespund cerințelor" și  pe următoarele linii permutările cu n elemente de la 1 la n, în caz contrar programul va afișa pe o linie nouă "Datele introduse nu corespund cerințelor" până când datele de intrare cor fi corespunzătoare.
Programul va afișa în fișierul permutari.in, mesajul "Datele introduse corespund cerințelor" și  pe următoarele linii permutările cu '''n''' elemente de la '''1'''la '''n''', în caz contrar programul va afișa pe o linie nouă "Datele introduse nu corespund cerințelor" până când datele de intrare cor fi corespunzătoare.
==Restricţii şi precizări==
==Restricţii şi precizări==
*1 ⩽ '''n''' ⩽ 9
*1 ⩽ '''n''' ⩽ 9
Linia 83: Linia 83:
             if numar <= 0 or numar > 10:
             if numar <= 0 or numar > 10:
                 output_file.write("Datele introduse nu corespund cerintelor.\n")
                 output_file.write("Datele introduse nu corespund cerintelor.\n")
                 sys.exit()  # program stops here
                 sys.exit()   
             else:
             else:
                 output_file.write("Datele introduse corespund cerintelor.\n")
                 output_file.write("Datele introduse corespund cerintelor.\n")
Linia 89: Linia 89:
         except ValueError:
         except ValueError:
             output_file.write("Introduceti un numar intreg pozitiv.\n")
             output_file.write("Introduceti un numar intreg pozitiv.\n")
             sys.exit()  # program stops here
             sys.exit()   


#functia care verifica daca elementele multimi sunt unice
#functia care verifica daca elementele multimi sunt unice

Versiunea de la data 20 martie 2023 21:29

Sursa: [1]

Cerinţa

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

Date de intrare

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

Date de iesire

Programul va afișa în fișierul permutari.in, mesajul "Datele introduse corespund cerințelor" și pe următoarele linii permutările cu n elemente de la 1la n, în caz contrar programul va afișa pe o linie nouă "Datele introduse nu corespund cerințelor" până când datele de intrare cor fi corespunzătoare.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 9

Exemplu

Exemplul 1

permutari.in
4
permutari.out
Datele introduse corespund cerințelor.
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

Exemplul 2

permutari.in
0
permutari.out
Datele introduse nu corespund cerințelor.

Exemplul 3

permutari.in
bau bau
permutari.out
Datele introduse nu corespund cerințelor.

Rezolvare

#0123
import sys
#functia care valideaza daca numarul din fisierul de intrare este un numar intreg pozitiv intre 1 si 10
def validare_numar_intreg_pozitiv(input_file, output_file, mesaj):
    numar = -1
    while numar <= 0 or numar > 10:
        try:
            numar = int(input_file.readline().strip())
            if numar <= 0 or numar > 10:
                output_file.write("Datele introduse nu corespund cerintelor.\n")
                sys.exit()  
            else:
                output_file.write("Datele introduse corespund cerintelor.\n")
                return numar
        except ValueError:
            output_file.write("Introduceti un numar intreg pozitiv.\n")
            sys.exit()  

#functia care verifica daca elementele multimi sunt unice
def Ok(k):
    for i in range(1,k):
        if multime[k]==multime[i]:
            return 0
    return 1
#functia care gaseste toate permutarile de n elemente si le scrie in fisierul de iesire
def back(k):
    with open('permutari.out', 'a') as output_file:
        for i in range(1, n + 1):
            multime[k] = i
            if Ok(k):
                if k == n:
                    for j in range(1, n + 1):
                        output_file.write(str(multime[j]))
                        if j < n:
                            output_file.write(" ")
                    output_file.write("\n")
                else:
                    back(k + 1)

if __name__ == '__main__':
    with open('permutari.in', 'r') as input_file, open('permutari.out', 'w') as output_file:
        n = validare_numar_intreg_pozitiv(input_file, output_file, "Dați numărul:\n")
    multime = [None] * 11# se initializeaza o lista in care se vor stoca elementele multimii
    back(1)# se apeleaza functia back pentru a gasi permutarile multimii