3160 - cifre c: Difference between revisions

From Bitnami MediaWiki
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...
 
 
Line 27: Line 27:
  4618 3
  4618 3
consola
consola
  "Nu corespunde restricțiilor".
  Nu corespunde restricțiilor.


== Rezolvare ==
== Rezolvare ==

Latest revision as of 19:50, 9 December 2023

Cerința[edit | edit source]

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

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

Date de ieșire[edit | edit source]

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

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

Intrare

4618 3

Ieșire

468
168
148
146

Exemplul 2[edit | edit source]

Intrare

4618 3

consola

Nu corespunde restricțiilor.

Rezolvare[edit | edit source]

<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>