c++随机数_c++算法训练随机数(蓝桥杯)--足球比赛

db60ef3a2d6a1bc514d8781e415c7ef0.png

大家好,我是名侦探茹小依,今天我们用一道蓝桥杯的竞赛题来讲讲如何使用随机数来模拟概率的情况。首先来说一下预备知识,随机数的使用:

C++使用随机数要用到包含头文件 #include <ctime>,这种随机数是根据时间变化产生的一种伪随机数。使用时:

1. 包含头文件#include <ctime>

2. 定义随机化种子:srand(time(NULL))

3. 用rand()就可以可得到0 ~ 32757范围的随机数

4. 用下列公式即可得到指定范围[m,n]的随机数:r = rand()%(n - m + 1) + m;

5. 注意:n - m 的绝对值不能超过32767

首先来看题目:

足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。

假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:

- 0.1 0.3 0.5

乙 0.9 - 0.7 0.4

丙 0.7 0.3 - 0.2

丁 0.5 0.6 0.8 -

数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...

现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。

请你进行10万次模拟,计算出甲队夺冠的概率。

可以看到进行10万次模拟,就是让我们使用随机数的一个提示,程序实现所有可能后,进行10万次模拟,满足条件的记为一次,最后用满足条件的除以模拟总次数,就是甲获胜的频率。

而实验次数一多,概率也就成了频率。

至于如何实现,让我们看如下程序(基于循环的熟练使用):

#include <iostream>

#include <ctime>

using namespace std;

int main()

{

srand(time(NULL));

int a,b,c,d,n=0;

double m;

int t=100000;

int game[4][4]={0,1,3,5,9,0,7,4,7,3,0,2,5,6,8,0};//将概率扩大10倍

for(int i=1;i<=t;i++)

{

a=rand()%10;//随机产生0~9一个数当做比赛概率

b=rand()%3+1;//随机产生0~3一个数当做与乙、丙、丁三人随机比赛

if(a>=game[0][b])//甲输了

continue;//跳出本次循环开始下一次

else

{

if(b==1)//甲赢了乙

{

c=rand()%10;

if(c>=2)//丙胜

b=2;

else//丁胜

b=3;

}

if(b==2)//甲赢了丙

{

c=rand()%10;

if(c>=4)//丁胜

b=3;

else//乙胜

b=1;

}

if(b==3)//甲赢了丁

{

c=rand()%10;

if(c>=7)//丙胜

b=2;

else//乙胜

b=1;

}

d=rand()%10;

if(d>=game[0][b])//甲输了,结束本次循环

continue;

else

n++;//最终甲取胜,记数一次。

}

}

m=double(n)/t;//注意计算时,强制数据类型转换

cout<<"甲获胜的次数为:"<<endl<<n<<endl<<"甲获胜的概率为:"<<endl<<m*100<<"%"<<endl;

return 0;

}

多运行几次,由于是随机数,小数点后几位会有些不同,属于正常现象

7bbb37b95a8001ec3da621265c8c287a.png

49f806ca4ab2071af9d577895a0834a1.png

c66185e9156aea994b3fbfaaf0b7acdd.png

注释尽量详细了,有什么不懂得在评论区来问吧!

码字不易,给小依酱的文章一个赞,给小依酱的专栏一个关注吧⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值