0123 - Permutari

From Bitnami MediaWiki

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>