Wan*_*ong 1 c c++ algorithm binary hex
我需要生成这样一个32位二进制序列:它有8个'1',其余位是'0'.所以用十六进制编写,一些序列将是这样的:
000000FF
000001FE
000001FD
000001FB
000001F7
...
Run Code Online (Sandbox Code Playgroud)
问题是从32中选择8,因此有10518300种组合.换句话说,像我的例子一样有10518300个序列.如果您给我任何建议或算法来生成我想要的序列,我将不胜感激.
这个问题是关于进行零和一的排列.最简单的代码解决方案是使用next_permutation和a vector<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()));
Run Code Online (Sandbox Code Playgroud)
你的程序需要一个32位向量,最后八个元素设置为1.您需要将它们转换为32位int,而不是打印序列的元素,并将它们存储在输出容器中.