下面的代码会产生相同数量的1和0,它们会假设这样做。
然而,我想知道如何得到1岁的%年龄,休息是0。我需要在代码中做出哪些更改。等待您的回复!
int random_gen::uniformI(int low, int high)
{
int i;
if (low >= high)
i = low;
else {
i = (int) (randomperc() * (high - low + 1)) + low;
if(i > high)
i = high;
}
return(i);
}
//main
for (int l=0; l<NUM_NODES;l++) {
wkey = nodes[i].WitnessKey;
}
cout<<wkey
答案 0 :(得分:0)
在使用给定百分比1s初始化的阵列上使用Knuth Shuffle。以下实现25%:
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <iterator>
void shuffle(double percentage,std::vector<int> &l) {
if (l.empty()) return;
std::mt19937 gen;
unsigned int N_Ones = static_cast<unsigned int>(floor(percentage*l.size()));
l[0] = (N_Ones > 0)?1:0;
for(unsigned int i = 1; i < l.size() - 1; ++i) {
std::uniform_int_distribution<unsigned int> ui(0,i);
unsigned int j = ui(gen);
l[i] = l[j];
l[j] = (N_Ones > 0)?1:0;
}
}
int main(int argc, char* argv[])
{
unsigned int N = 10;
if (argc >= 1) N = atoi(argv[1]);
std::vector<int> l(N,0);
shuffle(0.25,l);
std::copy(l.begin(),l.end(),std::ostream_iterator<int>(std::cout,""));
std::cout << std::endl;
return 0;
}
请注意shuffle()
使用数组的隐式定义,其中第一个N_Ones
条目为1,其余为0.对于加密应用程序,您可能希望使用更好的随机源,然后标准Mersenne Twister std::mt19937
。