计算机模拟——你换不换手
自顶向下,逐步细化,模块设计,结构编码
问题描述:
有三本一样的书,A要把一张100块钱放在其中一本书里面,然后B从中选择一本自己觉得有钱的,主持人C从其他两本书中随便排除一本(C知道那一本有钱。),这是让B决定换不换自己的选择,然后揭晓答案。
需要模拟的是,到底是换手赢的几率大,还是不还手赢的几率大。
数据设计:
三本书,哪本书里有钱:int book[3]={0,0,1}
参与者手指向的书:int hand
主持人打开的书:int open模块设计
int main ()
{
for(i=0;i<10000;i++)
{
if(trail(不换手)==1)NoChangeWin++;
}
for(i=0;i<10000;i++)
{
if(trail(换手)==1)ChangeWin++;
}
printf("两个数");
return 0;
}
int trail(int change)
{
//向三本书里随机放钱
//player选一本书
//主持人排除一本书(不是player选的,同时没有钱的书)
//player决定是否换手
//揭晓输赢
}
一次实验的算法设计:
1、把钱随机放到一本书里:r=rand()%3; book[r]=1
2、参与者选中一本书: hand=rand()%3
3、主持人open一本书(无钱)
4、参与者决定是否换手
5、揭晓输赢编码
int trail(int change)
{
//向三本书里随机放钱
int book[3]={0,0,0};
int r=rand()%3;
book[r]=1;
//player选一本书
int hand;
hand=rand()%3;
//主持人排除一本书(不是player选的,同时没有钱的书)
int open=rand()%3;
if(open==hand||book[open]==1)
open=rand()%3;
//player决定是否换手
if(change==1)
hand=3-r-open;
//揭晓输赢
if(book[hand]==1)return 1;
else return 0;
}
- 随机函数头文件
include stdio.h include stdlib.h includeranh time.h
然后要在主函数中加上:
srand((unsigned) time(NULL));表示给rand赋一随机值,用time取一个随机种子。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int trail(int change)
{
//向三本书里随机放钱
int book[3]={0,0,0};
int r=rand()%3;
book[r]=1;
//player选一本书
int hand;
hand=rand()%3;
//主持人排除一本书(不是player选的,同时没有钱的书)
int open=rand()%3;
if(open==hand||book[open]==1)
open=rand()%3;
//player决定是否换手
if(change==1)
hand=3-r-open;
//揭晓输赢
if(book[hand]==1)return 1;
else return 0;
}
int main ()
{
srand((unsigned) time(NULL));
int i=0,NoChangeWin=0,ChangeWin=0;
for(i=0;i<10000;i++)
{
if(trail(0)==1)NoChangeWin++;
}
for(i=0;i<10000;i++)
{
if(trail(1)==1)ChangeWin++;
}
printf("%d %d",NoChangeWin,ChangeWin);
return 0;
}