3150 - permutari pfp

From Bitnami MediaWiki

Cerința[edit | edit source]

Se citește un număr natural n (n<16). Afișați în ordine lexicografică toate permutările mulțimii {1,2,…,n} în care elementele pare sunt puncte fixe (nu își schimbă poziția).

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu.

Restricții și precizări[edit | edit source]

  • 1 < n < 16

Exemplul 1[edit | edit source]

Intrare

5

Ieșire

1 2 3 4 5 
1 2 5 4 3 
3 2 1 4 5 
3 2 5 4 1 
5 2 1 4 3 
5 2 3 4 1

Exemplul 2[edit | edit source]

Intrare

19

consola

Valoarea lui n nu respectă restricțiile.

Rezolvare[edit | edit source]

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

   return 1 < n < 16

def are_elementele_pare_pe_pozitii_corecte(perm):

   for i in range(len(perm)):
       if perm[i] % 2 == 0 and perm[i] != i + 1:
           return False
   return True

def backtracking(perm, poz, n):

   if poz == n:
       if are_elementele_pare_pe_pozitii_corecte(perm):
           print(*perm)
       return
   
   for i in range(1, n + 1):
       if i not in perm:
           perm[poz] = i
           backtracking(perm, poz + 1, n)
           perm[poz] = 0
  1. Citirea valorii lui n de la tastatură

n = int(input("Introduceți un număr natural n (1 < n < 16): "))

  1. Verificăm restricțiile asupra valorii lui n

if verifica_restrictii_n(n):

   # Inițializarea permutării
   permutare = [0] * n
   # Apelarea funcției pentru a afișa permutările cerute
   backtracking(permutare, 0, n)

else:

   print("Valoarea lui n nu respectă restricțiile.")

</syntaxhighlight>