【发布时间】:2020-05-03 13:17:51
【问题描述】:
如何找到所有小于给定 no 且设置位数少于给定 no 的数字,但不管 no。设置位的每个生成的 no 都将与给定 no 的设置位位置相同。举一个例子假设给定的 no 是 13(二进制的 1101),那么所有生成的 no 将是 12(二进制的 1100 ),9 (二进制 1001),8(二进制 1000),5(二进制 0101),4(二进制 0100),1(二进制 0001)。 可以看出,在 1100 中(设置的位位置是 2 和 3,如给定的 no.1101)。 我想要一个有效的算法。
【问题讨论】:
-
为什么不是十个? 1010?
-
因为在 1010 中设置的位位置是 1 和 3,但在 13(二进制中的 1101)中,1 位置没有设置位
-
我希望生成的 no 的 set bit 位置根据给定 no 无论它有多少 set bits
-
所以你只想要由原始数字所在位置的数字组成的数字上的所有子集?你知道这个数字很大吗?是类似于 2^n 的东西,其中 n 是原始位中设置为 1 的位数?
-
是否必须生成给定编号的设置位位置的所有子序列?
标签: algorithm c++11 bit-manipulation