有一个递增的数字序列,其中包含相同数量的二进制 1。给定 n(系列中每个数字中设置的 1 位数)编写算法或 C 程序以找到系列中的第 n 个数字。
我在互联网上找到了这个问题,我认为答案只是 (((1 << (n+1)) - 1) & ~2)。不是吗?我发现了一些可怕的程序来计算答案。
(1 << n+1) - 3
是一种更简洁的结果表达方式,但是是的,我相信你的表达方式也是正确的。
对,是真的。当我们有 3 位时:
1: 00000111
2: 00001011
3: 00001101 // bit 1 will be 0
4: 00001110
所以答案是 n+1 位,其中第 1 位为 0。
我相信你是对的。一个更简单的编写方法是:((1 << n) - 1) << 1。
这个问题似乎没有指定序列从哪里开始,或者每次数字会增加多少,而您的答案似乎假设序列将从 011111 开始,然后移动到 101111,依此类推。可以想象它可以从 0011111000 开始,下一个元素可能是 1111100000。
编辑
如https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/所述,该问题的标题为“系列的第 n 个数字”,因此这篇文章的标题(“第 n 个最小的数字与 n bits 设置为 1") 并不能真正保持问题的起源。