0123 - Permutari: Difference between revisions
mNo edit summary |
mNo edit summary |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 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 | ||
Line 12: | Line 12: | ||
; permutari.in | ; permutari.in | ||
: 4 | : 4 | ||
; Date de ieșire | |||
: Datele introduse corespund cerințelor. | |||
; permutari.out | ; permutari.out | ||
:1 2 3 4 | |||
:1 2 3 4 | |||
:1 2 4 3 | :1 2 4 3 | ||
:1 3 2 4 | :1 3 2 4 | ||
:1 3 4 2 | :1 3 4 2 | ||
:1 4 2 3 | :1 4 2 3 | ||
:1 4 3 2 | :1 4 3 2 | ||
:2 1 3 4 | :2 1 3 4 | ||
:2 1 4 3 | :2 1 4 3 | ||
:2 3 1 4 | :2 3 1 4 | ||
:2 3 4 1 | :2 3 4 1 | ||
:2 4 1 3 | :2 4 1 3 | ||
:2 4 3 1 | :2 4 3 1 | ||
:3 1 2 4 | :3 1 2 4 | ||
:3 1 4 2 | :3 1 4 2 | ||
:3 2 1 4 | :3 2 1 4 | ||
:3 2 4 1 | :3 2 4 1 | ||
:3 4 1 2 | :3 4 1 2 | ||
:3 4 2 1 | :3 4 2 1 | ||
:4 1 2 3 | :4 1 2 3 | ||
:4 1 3 2 | :4 1 3 2 | ||
:4 2 1 3 | :4 2 1 3 | ||
:4 2 3 1 | :4 2 3 1 | ||
:4 3 1 2 | :4 3 1 2 | ||
:4 3 2 1 | : 4 3 2 1 | ||
=== Exemplul 2 === | === Exemplul 2 === | ||
; permutari.in | ;permutari.in | ||
: 0 | :0 | ||
; | ;Date de ieșire | ||
: Datele introduse nu corespund cerințelor. | :Datele introduse nu corespund cerințelor. | ||
=== Exemplul 3 === | ;permutari.out | ||
; permutari.in | : | ||
: bau bau | ===Exemplul 3=== | ||
; permutari.out | ;permutari.in | ||
: Datele introduse nu corespund | :bau bau | ||
;Date de ieșire | |||
:Datele introduse nu corespund cerințelor. | |||
;permutari.out | |||
: | |||
===Rezolvare=== | |||
<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> |
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>