0123 - Permutari: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 97: | Line 97: | ||
#functia care verifica daca elementele multimi sunt unice | #functia care verifica daca elementele multimi sunt unice | ||
def Ok( | def Ok(index): | ||
for i in range(1, | for i in range(1,index): | ||
if multime[ | if multime[index]==multime[i]: | ||
return 0 | return 0 | ||
return 1 | return 1 | ||
#functia care gaseste toate permutarile de n elemente si le scrie in fisierul de iesire | #functia care gaseste toate permutarile de n elemente si le scrie in fisierul de iesire | ||
def back( | def back(index): | ||
with open('permutari.out', 'a') as output_file: | with open('permutari.out', 'a') as output_file: | ||
for i in range(1, n + 1): | for i in range(1, n + 1): | ||
multime[ | multime[index] = i | ||
if Ok( | if Ok(index): | ||
if | if index == n: | ||
for j in range(1, n + 1): | for j in range(1, n + 1): | ||
output_file.write(str(multime[j])) | output_file.write(str(multime[j])) | ||
Line 115: | Line 115: | ||
output_file.write("\n") | output_file.write("\n") | ||
else: | else: | ||
back( | back(index + 1) | ||
if __name__ == '__main__': | if __name__ == '__main__': |
Latest revision as of 12:03, 21 March 2023
Sursa: [1]
Cerinţa[edit | edit source]
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[edit | edit source]
Fişierul de intrare permutari.in conţine pe prima linie numărul n.
Date de iesire[edit | edit source]
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[edit | edit source]
- 1 ⩽ n ⩽ 9
Exemplu[edit | edit source]
Exemplul 1[edit | edit source]
- permutari.in
- 4
- Date de ieșire
- Datele introduse corespund cerințelor.
- permutari.out
- 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[edit | edit source]
- permutari.in
- 0
- Date de ieșire
- Datele introduse nu corespund cerințelor.
- permutari.out
Exemplul 3[edit | edit source]
- permutari.in
- bau bau
- Date de ieșire
- Datele introduse nu corespund cerințelor.
- permutari.out
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="">
- 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: print("Datele introduse nu corespund cerintelor.\n") sys.exit() # program stops here else: print("Datele introduse corespund cerintelor.\n") return numar except ValueError: print("Introduceti un numar intreg pozitiv.\n") sys.exit() # program stops here
- functia care verifica daca elementele multimi sunt unice
def Ok(index):
for i in range(1,index): if multime[index]==multime[i]: return 0 return 1
- functia care gaseste toate permutarile de n elemente si le scrie in fisierul de iesire
def back(index):
with open('permutari.out', 'a') as output_file: for i in range(1, n + 1): multime[index] = i if Ok(index): if index == 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(index + 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
</syntaxhighlight>