n-е наименьшее число с n битами, установленными в 1 - PullRequest
1 голос
/ 05 января 2011

Существует последовательность возрастающих чисел с одинаковым числом двоичных единиц в них. Для n (число 1 битов, установленных в каждом номере серии) напишите алгоритм или программу на C, чтобы найти n-е число в серии.

Я нашел этот вопрос в Интернете, и я думаю, что ответ просто (((1 << (n + 1)) - 1) & ~ 2). Разве это не правильно? Я нашел несколько страшных программ для вычисления ответа. </p>

Ответы [ 4 ]

5 голосов
/ 05 января 2011

(1 << n+1) - 3 - более краткий способ выразить результат, но да, я считаю, что ваше выражение также верно.

1 голос
/ 05 января 2011

Да, это правда. Когда у нас есть 3 бита:

1:  00000111
2:  00001011
3:  00001101 // bit 1 will be 0
4:  00001110

поэтому ответ равен n + 1 битам, где бит 1 равен 0.

0 голосов
/ 05 января 2011

Вопрос, похоже, не указывает, где начинается последовательность или насколько число будет увеличиваться каждый раз, тогда как ваш ответ предполагает, что последовательность начнется с 011111, затем переместится на 101111 и так далее.Возможно, он может начинаться с 0011111000, а следующий элемент может быть 1111100000.

Правка

Вопрос, как указано в https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/, называется "n-й номер серии ", поэтому заголовок этого поста (" n-е наименьшее число с n битами, установленными в 1 ") не совсем соответствует происхождению вопроса.

0 голосов
/ 05 января 2011

Я верю, что вы правы. Более простой способ написать это будет: ((1 << n) - 1) << 1. </strike>

...