计算机模拟——你换不换手

计算机模拟——你换不换手

自顶向下,逐步细化,模块设计,结构编码

问题描述:
有三本一样的书,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;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值