Python

Python. Решение без функции def, словарей и списков

Алфавит языка некоторого племени содержит всего несколько букв. Найдите все слова длины K, которые можно построить с помощью этого алфавита и в которых вторая буква – это первая буква алфавита.
Входные данные
Первая входная строка содержит алфавит языка. Во второй строке записывается число K (K ≥  2).
Выходные данные
Программа должна вывести все допустимые слова, которые можно составить с помощью заданного алфавита. Слова должны быть выведены по одному в строчке в алфавитном порядке. После всех слов в отдельной строке выводится их количество.
 abc, k = input(), int(input())
q = len(abc)
for n in range(q ** (k - 1)):
print(abc[n // (q ** (k - 2))] + abc[0], end='')
for i in range(k - 3, -1, -1): print(abc[n // (q ** i) % q], end='')
print()
print(q ** (k - 1))
Ринат Шакиров
Ринат Шакиров
53 235
Лучший ответ
Здравствуйте!
Вот программа для Вас:
 # Ввожу алфавит в программу 
alphabet = input()
# Ввожу в программу длину слова
k = int(input())
# Вычисляю длину алфавита
ln = len(alphabet)

# Запускаю цикл для перебора всех слов
# длины "k" алфавита длины "ln". То есть
# я здесь работаю с системой счисления по
# основанию ln
for i in range(ln ** k):

# *************************************
# Трансформирую число "i" в слово "res"
# Например, число 0 в алфавите "dfr" я
# трансформирую в слово "ddd", число 1
# - в слово "ddf", число 2 - в слово "ddr"

# Сохраняю число i в переменную a, чтобы
# потом с ним работать
a = i
# Для начала результат равен пустой строке
res = ""
# Запускаю цикл для перевода числа "a" в
# слово "res". Здесь я считаю, что число "a"
# - это число в системе исчисления с основанием
# "ln"
while a > 0:
# Записываю в "char" последнюю цифру числа "i"
char = a % ln
# Беру символ из алфавита, соответствующий
# этой цифре, и добавляю его к результату
res = alphabet[char] + res
# Сдвигаю значение a на один символ вправо в
# системе исчисления с основанием ln
a = a // ln

# Дополняю результат первым символом до длины "k"
while len(res) < k:
res = alphabet[0] + res
# трансформировал число "i" в слово "res"
# ***************************************

# Если вторая бурва слова равна 1-й букве алфавита,
# то вывожу это число на экран
if res[1] == alphabet[0]:
print(res)
Ринат Шакиров Вместо того, чтобы выдать только требуемые ln ** (k - 1) вариантов, перебирает ln ** k вариантов из которых (ln - 1) * (ln ** (k - 1)) - отсеиваемый мусор.
Достаточно генерировать строки длиной k - 1 и просто вставлять на вторую позицию alphabet[0].