Я хотел бы создать функцию, где для произвольного целочисленного входного значения (скажем, без знака 32 бит) и заданного числа d
цифры возвращают значение d
digit B
базовый номер, B
является наименьшей базой, которая может использоваться для представления заданного ввода на d
цифр.Представляем целые числа по d-цифрам с использованием наименьшей возможной базы
Вот входной пример - вывод о том, что я имею в виду 3 цифры:
Input Output
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1
8 0 0 2
9 0 1 2
10 1 0 2
11 1 1 2
12 0 2 0
13 0 2 1
14 1 2 0
15 1 2 1
16 2 0 0
17 2 0 1
18 2 1 0
19 2 1 1
20 0 2 2
21 1 2 2
22 2 0 2
23 2 1 2
24 2 2 0
25 2 2 1
26 2 2 2
27 0 0 3
28 0 1 3
29 1 0 3
30 1 1 3
.. .....
Назначение должно быть 1: 1, для каждого входного значения должно быть ровно один, уникальное значение выходной. Подумайте об этом, как будто функция должна вернуть значение nth
из списка странно отсортированных базовых чисел B
.
На самом деле это единственный подход, который я мог придумать до сих пор с - с учетом входного значения, порождают все числа в наименьшей возможной B
основанием для представления входных данных на d
цифр, а затем применить пользовательскую сортировку результатов («наказывая» значения более высоких цифр и помещая их обратно в сортировку) и возвращает значение nth
из отсортированного массива. Это будет работать, но это впечатляюще неэффективная реализация - я бы хотел сделать это, не генерируя все числа до входного значения.
Что было бы эффективным подходом для реализации этой функции? Любой язык или псевдокод в порядке.
Я не понимаю выход для чисел> = 8, вы можете объяснить? – Henry
@Henry Base 2 переходит в '2^3-1', база 3 переходит в' 3^3-1', база 4 переходит в '4^3-1' и т. Д. – user3386109
Десятичное число 8 не может быть представлено на 3 цифры в двоичном формате, поэтому 8 должен соответствовать первому тернарному номеру, который не является допустимым двоичным кодом –