0202 - PermPF

From Bitnami MediaWiki

Enunț[edit | edit source]

Fie mulţimea M={1,2,..,n} şi P(1),P(2),...,P(n) o permutare a ei. Elementul x din M se numeşte punct fix dacă P(x)=x.

Cerinţa[edit | edit source]

Se citeşte un număr natural nenul n. Să se afişeze, în ordine lexicografică, permutările fără puncte fixe ale mulţimii {1,2,..,n}.

Date de intrare[edit | edit source]

Fişierul de intrare permpfIN.txt conţine pe prima linie numărul n.

Date de ieşire[edit | edit source]

Fişierul de ieşire permpfOUT.txt va conţine pe fiecare linie elementele unei permutări, separate prin câte un spaţiu.

Restricţii şi precizări[edit | edit source]

  • 0 < n < 9

Exemplul 1[edit | edit source]

permpfIN.txt

3

permpfOUT.txt

2 3 1 
3 1 2 

Exemplul 2[edit | edit source]

permpfIN.txt

10

Consola

Valoarea lui n nu respectă restricțiile.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii_n(n):

   return 0 < n < 9

def are_puncte_fixe(perm):

   for i in range(len(perm)):
       if perm[i] == i + 1:
           return True
   return False

def backtracking(perm, poz, n, output_file):

   if poz == n:
       if not are_puncte_fixe(perm):
           output_file.write(' '.join(map(str, perm)) + '\n')
       return
   
   for i in range(1, n + 1):
       if i not in perm:
           perm[poz] = i
           backtracking(perm, poz + 1, n, output_file)
           perm[poz] = 0

def permutari_fara_puncte_fixe(n, output_file):

   perm = [0] * n
   backtracking(perm, 0, n, output_file)
  1. Citirea valorii lui n din fișierul de intrare

with open("permpfIN.txt", "r") as input_file:

   line = input_file.readline().strip()
   if not line:
       print("Fișierul de intrare este gol sau corupt.")
   else:
       try:
           n = int(line)
           # Verificăm restricțiile asupra valorii lui n
           if verifica_restrictii_n(n):
               # Deschiderea fișierului de ieșire
               with open("permpfOUT.txt", "w") as output_file:
                   # Apelăm funcția pentru generarea permutărilor fără puncte fixe
                   permutari_fara_puncte_fixe(n, output_file)
           else:
               print("Valoarea lui n nu respectă restricțiile.")
       except ValueError:
           print("Linia citită din fișier nu reprezintă un număr întreg valid.")

</syntaxhighlight>