0123 - Permutari: Difference between revisions

From Bitnami MediaWiki
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 15: Line 15:
: Datele introduse corespund cerințelor.
: Datele introduse corespund cerințelor.
; permutari.out
; permutari.out
:Datele introduse corespund cerințelor.
: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
Line 88: Line 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:
                 output_file.write("Datele introduse nu corespund cerintelor.\n")
                 print("Datele introduse nu corespund cerintelor.\n")
                 sys.exit()   
                 sys.exit()  # program stops here
             else:
             else:
                 output_file.write("Datele introduse corespund cerintelor.\n")
                 print("Datele introduse corespund cerintelor.\n")
                 return numar
                 return numar
         except ValueError:
         except ValueError:
             output_file.write("Introduceti un numar intreg pozitiv.\n")
             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(k):
def Ok(index):
     for i in range(1,k):
     for i in range(1,index):
         if multime[k]==multime[i]:
         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(k):
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[k] = i
             multime[index] = i
             if Ok(k):
             if Ok(index):
                 if k == n:
                 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 116: Line 115:
                     output_file.write("\n")
                     output_file.write("\n")
                 else:
                 else:
                     back(k + 1)
                     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="">

  1. 0123

import sys

  1. 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
  1. 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
  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>