3153 - eliminaren
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 mult20
de litere - Cuvântul
s
este format din litere mici distincte 1 <= n <
numărul de litere ale luis
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>