4008 - back 11

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

Programul citește de la tastatură numerul n.

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 1 ≤ n ≤ 8.

Exemplu:[edit | edit source]

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:[edit | edit source]

Intrare

3

Ieșire

Nu corespunde restricțiilor.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> 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)


  1. 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.")

</syntaxhighlight>