1

有一个递增的数字序列,其中包含相同数量的二进制 1。给定 n(系列中每个数字中设置的 1 位数)编写算法或 C 程序以找到系列中的第 n 个数字。

我在互联网上找到了这个问题,我认为答案只是 (((1 << (n+1)) - 1) & ~2)。不是吗?我发现了一些可怕的程序来计算答案。

4

4 回答 4

5

(1 << n+1) - 3是一种更简洁的结果表达方式,但是是的,我相信你的表达方式也是正确的。

于 2011-01-04T23:45:42.003 回答
1

对,是真的。当我们有 3 位时:

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

所以答案是 n+1 位,其中第 1 位为 0。

于 2011-01-04T23:41:32.290 回答
0

我相信你是对的。一个更简单的编写方法是:((1 << n) - 1) << 1。

于 2011-01-04T23:34:31.037 回答
-1

这个问题似乎没有指定序列从哪里开始,或者每次数字会增加多少,而您的答案似乎假设序列将从 011111 开始,然后移动到 101111,依此类推。可以想象它可以从 0011111000 开始,下一个元素可能是 1111100000。

编辑

如https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/所述,该问题的标题为“系列的第 n 个数字”,因此这篇文章的标题(“第 n 个最小的数字与 n bits 设置为 1") 并不能真正保持问题的起源。

于 2011-01-04T23:41:53.590 回答