3160 - cifre c

From Bitnami MediaWiki
Revision as of 19:43, 4 December 2023 by Gabii (talk | contribs) (Pagină nouă: = Cerința = Se citesc un număr natural <code>n</code> având cifrele diferite două câte două și o cifră <code>c</code>. Afișați în ordine descrescătoare numerele formate din <code>c</code> cifre distincte care se pot obține din cifrele lui <code>n</code> și care au cifrele ordonate crescător. = Date de intrare = Programul citește de la tastatură numele <code>n</code> și <code>c</code>. = Date de ieșire = Programul va afișa pe ecran numerele cerute, câte...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

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

</syntaxhighlight>