方案一:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#define TIMES 10000000 //实验越多,频率就接近于概率
int main()
{
long long change=0,unchange=0,i;
int car, choice;
for (i=1; i< TIMES ;i++)
{
car = 1 + rand() % 3; //奖品位置随机
choice = 1 + rand() % 3; //人为选择随机
if (car == choice)
unchange++; //第一次选择就中奖且没有换门的情况
else
change++; //其他情况:就是不确定第一次是否中奖,选择换门
}
printf("没有换门:中奖次数为:%d次\n",unchange);
printf("中奖率为:%f\n",1.0*unchange/TIMES);
printf("换门后:中奖次数为:%d次\n",change);
printf("中奖率为:%f",1.0*change/TIMES);
return 0;
}
运行结果:
方案二:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
bool xuanze(bool change);
void fun(int n,bool change);
void fun(int n,bool change)
{
int wins=0;
for(int i=0;i<n;i++)
{
if(xuanze(change))
wins++;
}
printf("中奖次数为:%d次\n",wins);
printf("中奖率为:%f\n",1.0*wins/n);
}
bool xuanze(bool change)
{
//srand(time(0));
//sleep(2);
int n1=rand()%3+1;
//sleep(2);
int n2=rand()%3+1;
if(n1 != n2)
return change ? true:false;
else
return change ? false:true;
}
int main()
{
int num=0;
printf("请输入本次实验次数\n");
scanf("%d",&num);
printf("不换门:");
fun(num,false);
printf("换门:");
fun(num,true);
return 0;
}
运行结果: