0123 - Permutari: Difference between revisions

From Bitnami MediaWiki
No edit summary
mNo edit summary
 
(3 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
: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
; permutari.out
;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 cerințelor.
:bau bau
=== Rezolvare ===
;Date de ieșire
<syntaxhighlight lang="python" line>
:Datele introduse nu corespund cerințelor.
;permutari.out
:
===Rezolvare===
<syntaxhighlight lang="python" line="">
#0123
#0123
import sys
import sys
Line 82: 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()  # program stops here
                 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()  # program stops here
             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 110: 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>