Требуется написать консольное приложение (Windows). Приложение преобразовывает десятичное число в рефлексный код (Код Грея) с основанием 5 и разрядностью 3.
Пример входных данных:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Пример выходных данных:
000
001
002
003
004
014
013
012
011
010
020
021
022
023
024
034
033
Алгоритм гуглится по словам: non-Binary Gray code, n-ary Gray code, (n,k)-Gray code.
Я нашел реализацию на js, но выходная последовательность неправильная начиная с 6 (то есть, например, при десятичном входном значении 6 возвращается код 010, вместо ожидаемого 013)
function gray (n, k) {
if (k === undefined) k = 2;
if (n === 0) return [];
var codes = [];
var max = Math.pow(k, n);
for (var i = 0; i < max; i++) {
var res = [];
var shift = 0;
for (var j = n - 1; j >= 0; j--) {
var x = (digit(i, k, j) + shift) % k;
shift += k - x;
res.push(x);
}
codes.push(res);
}
return codes;
};
function digit (n, radix, i) {
return Math.floor(n / Math.pow(radix, i)) % radix;
}
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |