生成随机1和0

时间:2013-09-12 03:00:51

标签: visual-c++ random generator

下面的代码会产生相同数量的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

1 个答案:

答案 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