3160 - cifre c

De la Universitas MediaWiki

Cerința

Se citesc un număr natural n având cifrele diferite două câte două și o cifră c. Afișați în ordine descrescătoare numerele formate din c cifre distincte care se pot obține din cifrele lui n și care au cifrele ordonate crescător.

Date de intrare

Programul citește de la tastatură numele n și c.

Date de ieșire

Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor".

Restricții și precizări

  • 1 ≤ n ≤ 1.000.000.000, 1 < c < 9
  • n are cifrele distincte
  • c este mai mic decât numărul de cifre ale lui n

Exemplul 1

Intrare

4618 3

Ieșire

468
168
148
146

Exemplul 2

Intrare

4618 3

consola

Nu corespunde restricțiilor.

Rezolvare

def verifica_restricții(n, c):
    if not (1 <= n <= 1000000000 and 1 < c < 9):
        return False

    cifre_n = set(str(n))
    return len(cifre_n) == len(str(n)) and c < len(cifre_n)

def genereaza_numere(n, c):
    cifre_n = sorted(str(n))
    rezultat = []

    def backtrack(start, path):
        if len(path) == c:
            rezultat.append(int(''.join(path)))
            return

        for i in range(start, len(cifre_n)):
            backtrack(i + 1, path + [cifre_n[i]])

    backtrack(0, [])
    return rezultat

# Citirea datelor de intrare
try:
    n, c = input("Introduceți un număr natural n și un număr c (separate prin spațiu): ").split()
    n = int(n)
    c = int(c)

    if verifica_restricții(n, c):
        rezultate = genereaza_numere(n, c)

        if rezultate:
            print("Numerele cerute (ordonate descrescător):")
            for rezultat in sorted(rezultate, reverse=True):
                print(rezultat)
        else:
            print("Nu există numere conform cerințelor.")
    else:
        print("Nu corespunde restricțiilor.")
except ValueError:
    print("Introduceți numere valide.")