3909 - Permutari6

De la Universitas MediaWiki

Cerința

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

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

Date de ieșire

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

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

Exemplul 1

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

Intrare

5 3

consola

Restricții neîndeplinite.

Rezolvare

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()