如何计算生成的满足特定属性的随机数?

时间:2019-01-06 19:54:14

标签: c++ visual-c++

我想模拟一个简单的投币游戏:我投掷(公平)硬币一定次数,并想计算我总共获得多少个头。让我表示投掷硬币的次数,j表示获得的正面数。让0代表正面,1代表背面。

{
    int j = 0;

    srand(time(nullptr));
    for (int i = 0; i < 3; i++)
    {
        cout << rand() % 2 << endl;
        if (rand() % 2 == 0)
        {
            j = j + 1;
        }
    }
    cout << j << endl;
    return 0;
}

但是j的输出值不是我期望的;说我得到111(即三个尾巴),那么我期望j = 0;但是,实际生成的内容是不同的,并且每次编译时都会更改(例如,我得到j = 2,下次j = 1,依此类推)。

1 个答案:

答案 0 :(得分:2)

问题出在片段上

    cout << rand()%2 << endl;
    if (rand() % 2 == 0) {

您两次致电rand(),因此显示的号码和if使用的号码是不同的。试试

    r=rand();
    cout << r%2 << endl;
    if (r % 2 == 0) {

在声明r

之后

编辑

只需说明一下:变量赋值将在循环内完成,如

for (int i = 0; i < 3; i++)
{
    r=rand();
    cout << r%2 << endl;
    ...