3909 - Permutari6

From Bitnami MediaWiki

Cerința[edit | edit source]

Se citesc două numere a și b. Să se afișeze, în ordine lexicografică, permutările mulțimii {a, a + 1, ..., b}.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele a b.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran, fiecare pe câte o linie, permutările cerute. Elementele fiecărei permutări vor fi separate prin câte un spațiu.

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

  • 1 ≤ a < b ≤ 1.000.000.000
  • 0 < b - a < 8

Exemplul 1[edit | edit source]

Intrare

4 6

Ieșire

4 5 6 
4 6 5 
5 4 6 
5 6 4 
6 4 5 
6 5 4

Exemplul 2[edit | edit source]

Intrare

5 3

consola

Restricții neîndeplinite.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii(a, b):

   if not (1 <= a < b <= 1000000000) or not (0 < b - a < 8):
       print("Restricții neîndeplinite.")
       return False
   return True

def generate_permutations(a, b, current_permutation):

   result = []
   if len(current_permutation) == b - a + 1:
       result.append(current_permutation.copy())
       return result
   for i in range(a, b + 1):
       if i not in current_permutation:
           result.extend(generate_permutations(a, b, current_permutation + [i]))
   return result

def main():

   # Citim numerele a și b de la tastatură
   a, b = map(int, input("Introduceți valorile pentru a și b (separate prin spațiu): ").split())
   # Verificăm restricțiile folosind funcția dedicată
   if not verifica_restrictii(a, b):
       return
   # Generăm permutările și le afișăm
   permutari = generate_permutations(a, b, [])
   
   for permutare in permutari:
       print(" ".join(map(str, permutare)))

if __name__ == "__main__":

   main()

</syntaxhighlight>