有一系列不断增加的数字,其中包含相同数量的二进制1。给定n(系列中每个数字中设置的1位数)写一个算法或C程序来查找系列中的第n个数字。
我在互联网上发现了这个问题,我认为答案只是(((1 <&lt;(n + 1)) - 1)&amp; ~2)。不是吗?我找到了一些可怕的程序来计算答案。
答案 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个最小数字”)并未真正保留问题的起源。