一个IQ问题的C++模拟

原创 2004年07月07日 00:38:00

一个 IQ 问题的 C++ 模拟

问题:

你在一个电视节目中玩游戏 . 这个游戏是赢一辆车 . 主持人展示你三个门 . 他告诉你三个门中有一个门后是车 , 另两个门后是羊 . 他让你从中选一个门 . 然后你从中选一个门 , 但是这个门暂时不打开 . 然后主持人打开剩下两扇门中的一扇后面是羊的 ( 因为主持人知道哪扇门后是羊哪扇门后是车 ). 然后他说你还有机会改主意 , 你想换一扇门呢还是想仍旧选择你原来选择的那扇门 ?

你应该怎么做 ?

解答 1 :换不换都一样, 1/2 机会中

不要跟过去的情况联系起来,只考虑目前情况,选择的时间是打开 1 个门后,而打开一个门后的情况是:

只有 2 个门,其中 1 个门有车,另一个门有羊,现在选择

其实之前你选了和没选都是一样的,情况就是 1 门有车 1 门有羊, 50% 中。

解答 2 :

肯定要换啊 !!!

夸张点 :

100W 个盒子中有一个有奖品 .

你选了一个

别人打开了 100W-2 个后发现都是空的 .

你会换吗 ?

不管怎样你是否有奖品是你第一次选择时就决定的 . 这个选中几率是很小的啊 .....

这样几乎可以肯定最后一个盒子里有奖 !!

看似 2 种解答都有道理,下面用 C++ 模拟一下游戏过程,看看换和不换到底是哪个更吃亏。

模拟的思想是用一个 N 个 int 数据的数组表示 N 个门,其中只有一个值为 1 的的表示车,其他全是 0 表示全部是羊。用户选择其中一个元素,然后告诉用户除了被选择的元素和另一个我们随机选择的一个元素外,其他全是羊,给用户机会再次选择,然后进行统计,看玩 X 遍之后得到多少车多少羊就知道哪个解答是对的了。

下面是程序。

源程序如下

#include<stdlib.h>
#include<iostream.h>
#include<time.h>
#include <string.h>
#define MAX 3//the total doors MAX<RAND_MAX

int doors[MAX];//MAX doors


void init()
{
srand(unsigned(time(0)));
for(int i=0;i<MAX;i++)
{
doors[i]=0;//0=sheep,set each door to sheep,
}
doors[int(rand())%MAX]=1;// 1=car,one of the door is car,whichi door is car is randomized
}

int main(int argc, char* argv[])
{
int times=0;
int cars=0;
int sheep=0;

int i=0;

int choose=0;// the first choose
int choose2=0;

int preserved[2];//the preserved 2 unopened doors

while(1)//loop playing
{
/////////////////////////////
cout<<"you play total:"<<times<<" ,and you got:"<<endl;
cout<<"cars: "<<cars<<endl;
cout<<"sheep: "<<sheep<<endl;
cout<<endl;

init();

cout<<"now there is "<<MAX<<" doors , 1 of the door is car , "<<MAX-1<<" of the doors are sheep,please choose one "<<endl;
cout<<"enter your choise(input a number):";
cin>>choose;

for(i=0;i<MAX;i++)
{
if(doors[i]==1)
{
preserved[0]=i;//keep the door with car unopened
}
}

preserved[1]=choose;//keep the other door which user chose
while(preserved[1]==preserved[0])//if the user chose the door that with car
{
srand(unsigned(time(0)));
preserved[1]=(int(rand())%MAX);// randomize another door unopen
}

cout<<endl;
cout<<"now i tell u, expect the door "<<preserved[1]<<"(which you chose) and door "<<preserved[0]<<"(unknown what inside) are unopened, all the other doors are opened, and there are all sheep,i give u a chance to change your mind"<<endl;
cout<<"please enter 0 for stick, or enter 1 for change:";
cin>>choose2;

char s[128];
if(choose2==0)
{
strcpy(s,"you stick");
}
else
{
strcpy(s,"you changed");
cout<<"ok , u change your choise to door"<<((choose==preserved[0])?preserved[1]:preserved[0])<<endl;
choose=(choose==preserved[0])?preserved[1]:preserved[0];
}

cout<<endl;
cout<<"ok "<<s<<",now i tell you the car is in door "<<preserved[0]<<endl;

if(choose==preserved[0])
{
cout<<"you get a car"<<endl;
cars++;
}
else
{
cout<<"you get a sheep"<<endl;
sheep++;
}
///////////////////////
times++;
}
return 0;
}

///////////////////////////////////////////////

最上面

#define MAX 3

定义门的个数,首先像题目一样是 3 个,这样比较难看出换与不换的区别,但当门的个数逐渐增加时(比如 100 个),如果玩 10 遍或者 20 遍或者更多都选择不换的话,几乎总是得到羊的。

由此可见解答 2 是对的,即主持人给你第二次选择的机会的话,一定要换!!

IQ正交调制及星座图

QAM调制实际上是幅度调制和相位调制的组合。相位 + 幅度状态定义了一个数字或数字的组合。QAM的优点是具有更大的符号率,从而可获得更高的系统效率。通常由符号率确定占用带宽 一个信号有三个特性随时间...
  • zzsfqiuyigui
  • zzsfqiuyigui
  • 2013年06月04日 23:10
  • 2587

看得懂的IQ信号

(2010-06-28 10:56:38) 转载▼ 标签:  杂谈 分类: 电子技术 转载凤舞天 当前的数字射频芯片,无一例...
  • mirkerson
  • mirkerson
  • 2014年08月21日 20:09
  • 1741

Codeforces-287a C IQ Test

A. IQ Test time limit per test 2 seconds memory limit per test 256 megabytes In the city of Ult...
  • u012325552
  • u012325552
  • 2014年03月17日 11:15
  • 1167

1134:猴子与香蕉 dp

  题目描述 一组研究人员正在设计一个测试猴子IQ的实验。他们把香蕉吊在屋顶上,同时给猴子提供了砖块。如果猴子够聪明,它会把砖块一个个叠起来做成一个塔,然后爬上去拿到自己喜爱的食物。 ...
  • zjck1995
  • zjck1995
  • 2014年07月31日 14:12
  • 429

停车场的模拟管理(数据结构 C++)

[问题描述]:          设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场最里面)。如...
  • wanglj7525
  • wanglj7525
  • 2015年02月02日 15:08
  • 3661

codeforces A. IQ test 题解

Bob is preparing to pass IQ test. The most frequent task in this test is to find out which one of th...
  • kenden23
  • kenden23
  • 2014年05月01日 18:48
  • 1579

生产者消费者问题模拟(c++版本)

用C++实现生产者消费者问题模拟,显示每次添加和读取数据时缓冲区的状态,生产者和消费者可用线程模拟。  1.一个大小为10的缓冲区,初始为空。     2. 五个生产者:若缓冲区可以加入数据,则...
  • mayixixi
  • mayixixi
  • 2010年12月09日 13:36
  • 4254

Lint-code 用栈模拟汉诺塔问题

题目描述:在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限...
  • dancheren
  • dancheren
  • 2017年02月24日 21:15
  • 473

立此存照(22)[C++]模拟电子时钟的小程序

本程序模拟电子时钟显示:时分秒,且每个一秒刷新一次 #include #include #include struct Time { int hour; int minute; int ...
  • u011559205
  • u011559205
  • 2014年12月24日 10:41
  • 1058

IQ信号是什么

什么是I/Q信号 当前的数字射频芯片,无一例外的用到了I/Q信号,就算是RFID芯片,内部也用到了I/Q信号,然而绝大部分射频人员,对于IQ的了解除了名字之外,基本上一无所知。 网上有大量关于...
  • wu_cai_
  • wu_cai_
  • 2015年06月14日 19:11
  • 5916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个IQ问题的C++模拟
举报原因:
原因补充:

(最多只允许输入30个字)