4008 - back 11

De la Universitas MediaWiki

Cerința

Se citește un număr natural n. Afișați în ordine crescătoare toate numerele care sunt formate din n cifre distincte și care au mai multe cifre pare decât cifre impare.

Date de intrare

Programul citește de la tastatură numerul n.

Date de ieșire

Programul va afișa pe ecran pe linii separate numerele cerute. Numerele se vor afișa în ordine strict crescătoare

Î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 ≤ 8.

Exemplu:

Intrare

3

Ieșire

102
104
106
108
120
124
126
128
140
142
146
148
160
162
164
168
180
182
184
186
201
203
204
205
206
207
...
894
896
902
904
906
908
920
924
926
928
940
942
946
948
960
962
964
968
980
982
984
986

Exemplu:

Intrare

3

Ieșire

Nu corespunde restricțiilor.

Rezolvare

def numere_crescatoare(n):
    if not (1 <= n <= 8):
        print("Nu corespunde restricțiilor.")
        return None

    rezultate = []

    def are_mai_multe_cifre_pare(numar):
        cifre = [int(cifra) for cifra in str(numar)]
        cifre_pare = sum(1 for cifra in cifre if cifra % 2 == 0)
        cifre_impare = len(cifre) - cifre_pare
        return cifre_pare >= cifre_impare  # Am modificat condiția pentru a include și 0

    def genereaza_numere(prefix, cifre_disponibile):
        if len(prefix) == n:
            if are_mai_multe_cifre_pare(int(prefix)):
                rezultate.append(int(prefix))
            return

        for cifra in cifre_disponibile:
            if prefix or cifra != '0':  # Evită adăugarea 0 la început
                urmatoarele_cifre = cifre_disponibile.replace(cifra, '')
                genereaza_numere(prefix + cifra, urmatoarele_cifre)

    cifre_disponibile = ''.join(map(str, range(10)))  # Cifrele disponibile de la 0 la 9
    genereaza_numere('', cifre_disponibile)

    return sorted(rezultate)


# Citirea valorii de la tastatură cu verificare pentru restricții
try:
    n = int(input("Introduceți numărul n: "))
    rezultate = numere_crescatoare(n)
    if rezultate is not None:
        print(f"Numerele cu {n} cifre distincte, cu mai multe cifre pare decât cifre impare sunt:")
        for rezultat in rezultate:
            print(rezultat)
except ValueError:
    print("Introduceți un număr valid.")