3914 - Cuvinte12

De la Universitas MediaWiki
Versiunea din 3 iunie 2024 23:42, autor: Danciu (discuție | contribuții) (Pagină nouă: = Cerința = Se citește un cuvânt <code>S</code> format din litere mici distincte ale alfabetului englez și un număr <code>m</code>. Afișați în ordine lexicografică toate cuvintele formate din cel mult <code>m</code> litere ordonate alfabetic din <code>S</code>, în care nu există consoane alăturate și încep cu vocală. = Date de intrare = Programul citește de la tastatură cuvântul <code>S</code> și numărul <code>m</code>. = Date de ieșire = Programul va...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Se citește un cuvânt S format din litere mici distincte ale alfabetului englez și un număr m. Afișați în ordine lexicografică toate cuvintele formate din cel mult m litere ordonate alfabetic din S, în care nu există consoane alăturate și încep cu vocală.

Date de intrare

Programul citește de la tastatură cuvântul S și numărul m.

Date de ieșire

Programul va afișa pe ecran cuvintele cerute, câte unul pe un rând.

Restricții și precizări

  • 1 < m ≤ lungimea lui S ≤ 10

Exemplu:

Intrare

barni 3

Ieșire

a
ab
abi
ai
ain
air
an
ar
i
in
ir

Rezolvare

def generate_words(word, m, current_word, index, vowels_count):
    if len(current_word) > m or (len(current_word) > 0 and current_word[-1] in 'aeiou'):
        return

    if len(current_word) > 0:
        print(current_word)

    if index == len(word):
        return

    for i in range(index, len(word)):
        if word[i] in 'aeiou':
            generate_words(word, m, current_word + word[i], i + 1, 1)
        else:
            generate_words(word, m, current_word + word[i], i + 1, 0)


word, m = input().split()
m = int(m)
word = ''.join(sorted(word, key=lambda x: 'aeiou'.index(x) if x in 'aeiou' else 99))
generate_words(word, m, '', 0, 0)