Alex Fox это количество числе в таблице?
Ну - да, я имел ввиду количество строк.
1.Ваша задача еще напоминает классическую комбинаторную:"сколько маршрутов кратчайшей длины идет из левого нижнего угла шахматной доски в правый верхний угол?" (идем по соседним по стороне клеткам). Ответ - такой же:
. Потому что маршрут кодируется буквами П (вправо) и В (вверх). У Вас - то же самое: если в начале каждой строки приписать -чисто для кайфа - 0, а в конце -
, то символы в строке будут меняться в точности от 0 до
, и соответствующий маршрут на карте выглядит так: шагаем вверх (В) столько раз, на сколько отличаются символы в соседних местах вашей строки, ставим П, и т.д. Например, для строки 023 код будет такой : ПВВПВП... Опять же, эта кодировка делается совсем понятной, если вспомнить про метод "шары-перегородки" для задачи о сочетаниях с повторениями; П - это перегородки, ВВ..В - сколько шаров в соответствующем ящике. Может, эта геометрическая (или комбинаторная ))интерпретация будет вам полезна.
2. Вообше то в вашей постановке задачи , используется
лексикографический порядок (а способ нумерации, предложенный
svv - универсальный способ составления словаря челом, который не хочет заранее ограничивать себя количеством используемых букв ). Эта тематика - составление словарей и разработка прямого доступа к ним - наверняка классиками-программистами изучалась...
3. Аварийное завершение может происходить из-за факториалов больших чисел. Так не считайте биноминальные к-ты по этим формулам, а используйте рекуррентные (соседние бин.к-ты связаны совсем просто - получаются друг из друга домножением/делением на пару чисел) - тем более, что вам все равно нужно будет их отслеживать.