我想模拟一个简单的投币游戏:我投掷(公平)硬币一定次数,并想计算我总共获得多少个头。让我表示投掷硬币的次数,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,依此类推)。
答案 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;
...