从性别比例到游戏输赢,C/C++中随机数的生成

        最近这几年,中国出生人口断崖式下滑,且男女比例严重失衡。在第七次人口普查中,男女比例约为105:100。按理来说,出生人口的性别是随机的,在中国14亿人口的庞大基数下,应当是1:1的比例。然而,却出现了性别比例失衡的现象,一种可能的原因是中国大部分家庭存在重男轻女的思想,如果生不出男孩,就会一直生,直到生出男孩为止。

        基于这一现象,在游戏中,我们是否可以通过每天赢一把就不玩的战略(赢一把类似于生出男孩)来提高游戏的胜率?这里我们假设每把游戏获胜的概率为50%,需要生成一个随机数,偶数表示输,奇数表示赢,每天只要不赢就一直进行对局。在大量实验次数的情况下,看一下最终的胜率。

        这里我们使用srand函数,利用时间戳生成一个随机数种子,接下来就可以使用rand()直接生成一个范围是0~32767之间的随机数了,需要注意的是,因为时间戳的生成是真随机的,因此,我们这里生成的随机数也可看作是真随机的。

#include <time.h>
#include <stdlib.h>
#include <iostream>

#define N 1400000000

using namespace std;

int main()
{
    //设置随机数种子
	srand((unsigned int)time(NULL));
    
    //count代表总对局数,win_count代表赢的对局总数,lose_count代表输的对局总数
	int count = 0;
	int win_count = 0;
	int lose_count = 0;

	for (int i = 0; i < N; i++)
	{
        //生成一个随机数,偶数表示输,奇数表示赢
		int num = rand();
        //如果一直不赢,这一天就一直进行对局
		while (num % 2 != 1)
		{
            count++;
			lose_count++;
			num = rand();
		}
        //如果赢了,今天就结束
        count++;
		win_count += 1;
	}
    //输出
	cout << N << "天一共赢了" << win_count << "局,输了" << lose_count << "局!" << endl;
	return 0;
}

        我们直接将游戏天数设置为14亿,最终的结果是胜利的局数甚至还略少于失败的局数,从结果中我们可以看出,假设每把游戏获胜的概率为50%,每天只要不赢就一直进行对局的情况下,胜负的次数依然是差不多的,并且平均每天赢一把输一把。至于为何中国的男女比例会相差较大,可能还存在其他的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值