第n个最小数字,n位设置为1

时间:2011-01-04 23:28:00

标签: c algorithm bit

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我相信你是对的。 虽然写一个更简单的方法是: ((1 <&lt; n)-1)&lt;&lt; 1。

答案 3 :(得分:-1)

这个问题似乎没有说明序列的开始位置,或每次增加的数量,而你的答案似乎假设序列将以011111开始,然后移至101111,依此类推。它可以想象从0011111000开始,下一个元素可能是1111100000。

修改

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