3909 - Permutari6

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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