生成特定的32位二进制序列

时间:2013-01-30 03:47:04

标签: c++ c algorithm binary hex

我需要生成这样一个32位二进制序列:它有8个'1',其余位是'0'。所以用十六进制写的,一些序列将是这样的:

000000FF
000001FE
000001FD
000001FB
000001F7
...

问题是从32中选择8,因此有10518300种组合。换句话说,像我的例子一样有10518300个序列。如果您给我任何建议或算法来生成我想要的序列,我将不胜感激。

2 个答案:

答案 0 :(得分:6)

这个问题是关于做出0和1的排列。最简单的代码解决方案是使用next_permutationvector<bool>

以字典顺序准备一个具有最早排列的向量(一个位于后面)。运行next_permutation,直到它返回false。这是一个演示代码,它生成所有8位序列,其中设置了三个位:

vector<bool> data(8, false);
data[7] = data[6] = data[5] = true;
do {
    for (int i = 0 ; i != data.size() ; i++) {
        cout << (int)data[i];
    }
    cout << endl;
} while (next_permutation(data.begin(), data.end()));

这是a link to ideone with a running demo

您的程序需要一个32位向量,最后八个元素设置为1。您需要将它们转换为32位int,而不是打印序列的元素,并将它们存储在输出容器中。

答案 1 :(得分:0)

设计

  1. 定义组合的排序,使得一个首先出现,一个出现在最后,每个组合在该序列中都有一个位置。

  2. 编写一个算法,根据您的排序将序列转换为下一个序列。

  3. 在代码中实现该算法。

  4. 实现:

    1. 根据您的订单将序列设置为第一个序列。

    2. 输出当前序列。

    3. 如果这是最后一个序列停止。

    4. 使用您实施的算法转到下一个序列。

    5. 转到第2步。