先附上程序,相信大学C语言没挂的同学都应该看得懂
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<time.h>
int main()
{
srand(time(NULL));
int cs=100000,a,b,d,use[3],countb=0,countd=0,c;//countb是不换赢的次数,countd是换了赢的次数
while(cs--){//进行100000次实验
memset(use,0,sizeof(use));
a=rand()%3;//GOD任意选一个盒子放上钱
use[a]=1;
b=rand()%3;//玩家任意选一个盒子
while(1){//GOD随机去掉一个没钱的盒子
c=rand()%3;
if(c!=b&&use[c]==0)break;
}
for(d=0;d<3;d++){//得到剩余的那个盒子
if(d!=c&&d!=b)break;
}
if(use[b]==1){//不换而得到钱则countb加1
countb++;
}
else if(use[d]==1){//换了而得到钱则countd加1
countd++;
}
}
printf("%d %d\n",countb,countd);
return 0;
}
运行后,不换得钱的次数只有3W多次,换了得钱次数是6W多次.
说实话,我初看这题的时候也觉得应该不换和换了概率一样,但是事实就是事实,虽然我还是想不大明白.
那个KL开头,我想法和你是一样的,但是事实就是这样,我也搞不明白
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<time.h>
int main()
{
srand(time(NULL));
int cs=100000,a,b,d,use[3],countb=0,countd=0,c;//countb是不换赢的次数,countd是换了赢的次数
while(cs--){//进行100000次实验
memset(use,0,sizeof(use));
a=rand()%3;//GOD任意选一个盒子放上钱
use[a]=1;
b=rand()%3;//玩家任意选一个盒子
while(1){//GOD随机去掉一个没钱的盒子
c=rand()%3;
if(c!=b&&use[c]==0)break;
}
for(d=0;d<3;d++){//得到剩余的那个盒子
if(d!=c&&d!=b)break;
}
if(use[b]==1){//不换而得到钱则countb加1
countb++;
}
else if(use[d]==1){//换了而得到钱则countd加1
countd++;
}
}
printf("%d %d\n",countb,countd);
return 0;
}
运行后,不换得钱的次数只有3W多次,换了得钱次数是6W多次.
说实话,我初看这题的时候也觉得应该不换和换了概率一样,但是事实就是事实,虽然我还是想不大明白.
那个KL开头,我想法和你是一样的,但是事实就是这样,我也搞不明白









