抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

疯土豆先生的博客

世界上只有一种真正的英雄主义,那就是在认清生活的真相后依然热爱生活。——罗曼·罗兰

​ 前几天刷视频看见了这个,虽然这个是个“悖论”,但这个其实是个概率问题,只是有点让人难以理解罢了。刚开始我也有点被迷惑了,于是决定拾起丢下多年的C语言,编写了一个小程序,或不多说,代码见下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (){
srand(time(0));
int door1=0;
int door2=1;/*这里直接指定了哪扇门后有奖品,而不是再使用一次随机分配那扇门后有奖品,
因为在不知道门后有什么的前提下抽到奖品的概率是一样的*/
int door3=0;
int win=1;
int fstt=0;//第一抽抽中计数变量
int scndt=0;//开了一扇门后更改选择再抽抽中计数变量
int hc=0;//开了一扇门后随机决定改变选择
int fstt1=0;
int scndt1=0;
int hc1=0;
int i=1;
for(i;i<=100000;i++)
{
int num= rand() % 3 + 1;
int rdm= rand() % 2 + 1;//1为更换选择2为不更换选择
switch (num)
{
case 1 : win=0; scndt++;
if(rdm==1)
hc++;
break;
case 2 : win=1; fstt++;
if(rdm==2)
hc++;
break;
case 3 : win=0; scndt++;
if(rdm==1)
hc++;
break;
default : break;
}
//printf("随机数为:%d\n", num);
/*if (win==1)
{
//printf("恭喜你中奖了!\n");
fstt=fstt+1;
}
//else
//printf("可惜了,没中奖~\n");

*/
}
fstt1=fstt/1000;
scndt1=scndt/1000;
hc1=hc/1000;
printf("总的中奖率为:%d%%。\n",fstt1);
printf("开了一扇门后直接转换选择后的中奖率为:%d%%。\n",scndt1);
printf("开了一扇门后随机转换选择后的中奖率为:%d%%。\n",hc1);
return 0;
}
```

运行结果见下图

result

评论

友善评论,营造良好互联网环境。