3153 - eliminaren

From Bitnami MediaWiki
Revision as of 19:34, 18 May 2024 by Oros Ioana Diana (talk | contribs) (Pagină nouă: = Cerința = Se citesc de la tastatură un cuvânt <code>s</code> format din litere mici distincte și un număr natural <code>n</code>. Să se afișeze pe ecran toate cuvintele care se pot obține din <code>s</code> eliminând exact <code>n</code> litere. Eliminarea se face începând cu literele de la sfârșitul cuvântului, iar ordinea din cuvânt a literelor nu se schimbă (vezi explicația din exemplu). = Date de intrare = Programul citește de la tastatură cuvântul...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Se citesc de la tastatură un cuvânt s format din litere mici distincte și un număr natural n. Să se afișeze pe ecran toate cuvintele care se pot obține din s eliminând exact n litere.

Eliminarea se face începând cu literele de la sfârșitul cuvântului, iar ordinea din cuvânt a literelor nu se schimbă (vezi explicația din exemplu).

Date de intrare[edit | edit source]

Programul citește de la tastatură cuvântul s și numărul n.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe rânduri separate cuvintele care se pot obține din s eliminând exact n litere.

Restricții și precizări[edit | edit source]

  • Cuvântul s are cel mult 20 de litere
  • Cuvântul s este format din litere mici distincte
  • 1 <= n < numărul de litere ale lui s

Exemplu:[edit | edit source]

Intrare

dorel 2

Ieșire

dor
doe
dol
dre
drl
del
ore
orl
oel
rel

Explicație[edit | edit source]

Din cele 5 litere se elimina două, astfel:

dor – se elimina a 4-a si a 5-a litera

doe – se elimina a 3-a si a 5-a litera

dol – se elimina a 3-a si a 4-a litera

dre

drl

del

ore

orl

oel – se elimina prima si a 3-a litera

rel – se elimina prima si a 2-a litera

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def afisare(s, x, n, c):

   rezultat = .join(s[x[i] - 1] for i in range(1, n - c + 1))
   print(rezultat)

def bectreching(k, s, x, n, c):

   for i in range(x[k - 1] + 1, n + 1):
       x[k] = i
       if k < n - c:
           bectreching(k + 1, s, x, n, c)
       else:
           afisare(s, x, n, c)

def verifica_restrictii(s, c):

   if len(s) > 20 or not s.islower() or len(s) != len(set(s)) or not (1 <= c < len(s)):
       return False
   return True

def main():

   intrare = input().strip().split()
   s = intrare[0]
   c = int(intrare[1])
   if not verifica_restrictii(s, c):
       print("Datele nu corespund restrictiilor impuse")
       return
   
   n = len(s)
   x = [0] * (n + 1)
   bectreching(1, s, x, n, c)

if __name__ == "__main__":

   main()

</syntaxhighlight>