Создать числовую последовательность длины x с разницей в 1 бит только в последовательных числах

Был задан вопрос по телефону 1

Так что для длины = 1

0 1 (0 1)

Длина = 2

00 01 11 10 (0, 1, 3, 2)

и так далее

Функция записи длины x, которая возвращает числа в виде цифр (основание 10)

2 ответа

Решение

Это называется серый код, существует несколько различных видов, некоторые из которых легче построить, чем другие. Статья в Википедии показывает очень простой способ преобразования двоичного кода в серый:

unsigned int binaryToGray(unsigned int num)
{
    return (num >> 1) ^ num;
}

Используя это, вам нужно всего лишь перебрать все числа определенного размера, пропустить их через эту функцию и распечатать их так, как вы хотите.

Это один из способов сделать это:

int nval = (int)Math.Pow(2 , n);  
int divisor = nval/2; 
for (int i = 0; i < nval; i++)
{
    int nb =(int) (i % divisor);
    if ( nb== 2) Console.WriteLine(i + 1);
    else if (nb == 3) Console.WriteLine(i - 1);
    else Console.WriteLine(i);
}
Другие вопросы по тегам