是否有一种简单的方法可以找到所有二进制数字,这些数字的数字加起来等于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

10-06 02:00