3158 - numere123

De la Universitas MediaWiki

Cerința

Se citește un număr natural n având cifrele diferite două câte două. Afișați în ordine crescătoare numerele care se pot obține din cifrele lui n și care au același număr de cifre ca n.

Date de intrare

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

Date de ieșire

Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând.

Restricții și precizări

  • 1 ≤ n ≤ 1.000.000.000
  • n are toate cifrele distincte

Exemplul 2

Intrare

483

Ieșire

348
384
438
483
834
843

Exemplul 2

Intrare

443

consola

Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.

Rezolvare

def are_restrictii(n):
    return 1 <= n <= 1000000000 and len(set(str(n))) == len(str(n))

def permuteaza_cifrele(cifre):
    if len(cifre) == 1:
        return [cifre]

    permutari = []
    for i in range(len(cifre)):
        cifre_ramase = cifre[:i] + cifre[i + 1:]
        for p in permuteaza_cifrele(cifre_ramase):
            permutari.append([cifre[i]] + p)

    return permutari

def main():
    n = int(input("Introduceți un număr n cu cifre distincte: "))

    if not are_restrictii(n):
        print("Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.")
        return

    cifre_str = str(n)
    cifre_lista = [int(cifra) for cifra in cifre_str]
    toate_permutările = permuteaza_cifrele(cifre_lista)

    număr_cifre_n = len(cifre_lista)

    numere_rezultate = []
    for permutare in toate_permutările:
        if permutare[0] != 0:  # Evităm numerele cu zero în frunte
            număr = int(''.join(map(str, permutare)))
            if len(str(număr)) == număr_cifre_n:
                numere_rezultate.append(număr)

    numere_rezultate.sort()

    print("Numerele în ordine crescătoare cu aceleași cifre ca și n:")
    for număr in numere_rezultate:
        print(număr)

if __name__ == "__main__":
    main()