Пользователь вводит алфавит, в котором не должны содержаться одинаковые буквы, также вводится номер, по этому номеру необходимо составить слово
Алгоритм составления слова выглядит следующим образом:
Пусть алфавит (абс), нумерация элементов алфавита начинается с единицы, то есть у а порядковый номер единица и тд
Номер обозначим N и положим N=321
n=количество элементов алфавита(3 в нашем случае)
k=количество элементов в слове
pos - i-индекс элемента алфавита
N= n^(k-1)*pos1+n^(k-2)pos2+...+posk
Если k>n к1=к2*n+r;1<=r<=n
Говоря простыми словами, r- остаток от деления ki/n
Для нашего примера:
N=321=107*3=106*3+3=(35*3+1)*3+3=((11*3+2)*3+1)*3+3=(((3*3+2)*3+2)*3+1)*3+3=((3*3^2+2*3+2)*3+1)*3+3=((3*3^3+2*3^2+2*3+1)*3+3=3*3^4+2*3^3+2*3^2+3+3
Получим слово сббас
Я недавно пишу на питоне, поэтому не очень понимаю, как этот алгоритм реализовать. В своей реализации я просто хочу вывести расчеты на экран, но я понимаю, что это не решение, но как поступить иначе не знаю
N=321
ost_list=[]
k1_list=[]
k1=int(N/countOfABC)
ost=int(N%countOfABC)
ost_list.append(ost)
k1_list.append(k1)
print(k1,"*",countOfABC,"+",ost)
dictK1=dict()
while k1>countOfABC:
if ost==0:
k1-=1
ost=1*countOfABC
ost_list.append(ost)
k1_list.append(k1)
print(k1, "*", countOfABC, "+", ost)
ost = k1 % countOfABC
ost_list.append(ost)
k1 = int(k1 / countOfABC)
k1_list.append(k1)
print(k1, "*", countOfABC, "+", ost)
dictK1 = dict(zip(k1_list, ost_list))
listResverse=list(k1_list.__reversed__())
# for id in range(len(listResverse)):
# for value in enumerate(listResverse):
# print("(((",listResverse[id],"*",countOfABC,"+",dictK1[value],")*",countOfABC,"+",dictK1[value+1],")*",countOfABC
# ,"+",dictK1[value+2],")*",countOfABC,"+",dictK1[value+3])