0123 - Permutari: Diferență între versiuni
De la Universitas MediaWiki
mFără descriere a modificării |
mFără descriere a modificării |
||
(Nu s-a afișat o versiune intermediară efectuată de același utilizator) | |||
Linia 15: | Linia 15: | ||
: Datele introduse corespund cerințelor. | : 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 | ;Date de ieșire | ||
: Datele introduse nu corespund cerințelor. | :Datele introduse nu corespund cerințelor. | ||
; permutari.out | ;permutari.out | ||
: | : | ||
=== Exemplul 3 === | ===Exemplul 3=== | ||
; permutari.in | ;permutari.in | ||
: bau bau | :bau bau | ||
; Date de ieșire | ;Date de ieșire | ||
: Datele introduse nu corespund cerințelor. | :Datele introduse nu corespund cerințelor. | ||
; permutari.out | ;permutari.out | ||
: | : | ||
=== Rezolvare === | ===Rezolvare=== | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line=""> | ||
#0123 | #0123 | ||
import sys | import sys | ||
Linia 88: | Linia 87: | ||
numar = int(input_file.readline().strip()) | numar = int(input_file.readline().strip()) | ||
if numar <= 0 or numar > 10: | if numar <= 0 or numar > 10: | ||
print("Datele introduse nu corespund cerintelor.\n") | |||
sys.exit() | sys.exit() # program stops here | ||
else: | else: | ||
print("Datele introduse corespund cerintelor.\n") | |||
return numar | return numar | ||
except ValueError: | except ValueError: | ||
print("Introduceti un numar intreg pozitiv.\n") | |||
sys.exit() | sys.exit() # program stops here | ||
#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])) | ||
Linia 116: | Linia 115: | ||
output_file.write("\n") | output_file.write("\n") | ||
else: | else: | ||
back( | back(index + 1) | ||
if __name__ == '__main__': | if __name__ == '__main__': |
Versiunea curentă din 21 martie 2023 12:03
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
- 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
- permutari.in
- 0
- Date de ieșire
- Datele introduse nu corespund cerințelor.
- permutari.out
Exemplul 3
- permutari.in
- bau bau
- Date de ieșire
- Datele introduse nu corespund cerințelor.
- permutari.out
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:
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