是否有一种简单的方法可以找到所有二进制数字,这些数字的数字加起来等于x点,假设所有的二进制值都等于2点,所有的零值都等于1点。让我解释:
考虑到我收到一个数字5,我怎么能得到所有可能的字符串,使得2 *(1的个数)+ 1 *零= 5。
5下所有结果:
00000
10000
0100
0010
0001
101
110
011
(我确实知道可能的解决方案数是5 + 1(x + 1)的斐波那契数,但我想不出一种找到所有值的方法)。
我本来想以二进制形式添加数字,或者可能使用基本转换器,但是我可能在这里缺少了一些东西。先感谢您。
最佳答案
通过一个循环,您可以生成基本字符串(在您的情况下为“ 00000”,“ 0001”和“ 011”),然后使用std::next_permutation()
:
for( int zeros = n; zeros >= 0; zeros -= 2 ) {
int ones = ( n - zeros ) / 2;
std::string base = std::string( zeros, '0' ) + std::string( ones, '1' );
}
live example