3153 - eliminaren
Cerința
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
Programul citește de la tastatură cuvântul s și numărul n.
Date de ieșire
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
- Cuvântul
sare cel mult20de litere - Cuvântul
seste format din litere mici distincte 1 <= n <numărul de litere ale luis
Exemplu:
Intrare
dorel 2
Ieșire
dor doe dol dre drl del ore orl oel rel
Explicație
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
<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>