f********a 发帖数: 165 | 1 大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后
host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是
实现一个function:
bool play_game(bool contestant_will_switch_doors)
输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个,
false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到
prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。
enum Door
{
goat,
prize
};
class Game
{
private:
vector vec;
int m_size;
public:
Game(int size){
m_size = size;
srand(time(NULL));
int ran = rand() % m_size;
for(int i=0; i< m_size; i++)
{
if(ran == i)
vec.push_back(prize);
else
vec.push_back(goat);
}
}
bool play_game(bool contestant_will_switch_doors) {
// contestant picks a door
// host reveals a door
// contestant switches or not
// determine if the contestant wins or not
}
};
int main() {
Game* g = new Game(3);
return 0;
} |
u*****o 发帖数: 1224 | 2 这个是著名的monty hall吧?
2/3的可能性是开始选的是goat, 这样switch必赢
1/3的可能性是开始选的是price,这样switch必输。
所以结论是应该换。 |
n****e 发帖数: 678 | 3 照着你的架构写写:
bool play_game(bool contestant_will_switch_doors) {
srand( time(NULL) );
int contestant_index = rand() % 3;
int host_count = rand() % 2;
int host_index;
for (host_index = 0; host_index < 3; host_index++) {
if (host_index != contestant_index) {
host_count--;
}
if (host_count < 0) {
break;
}
}
if (contestant_will_switch_doors) {
return vec[3- contestant_index - host_index] == prize;
} else {
return vec[contestant_index] == prize;
}
} |
z****e 发帖数: 54598 | 4 概率题,condition被改变了,所以换和不换的概率是不一样的 |
g*********e 发帖数: 14401 | 5 换不换取决于host是无意打开一扇门给你看的,还是host事先知道那个门背后是山羊。
如果host也是瞎蒙的,那就是50 50,无所谓。如果host知道那个后面是山羊,那就是1
/3, 2/3. |
f********a 发帖数: 165 | 6 host是知道门背后是不是山羊,所以不管第一次选手打开的是什么,host总打开一个山
羊的门。看来是我孤陋寡闻了,没见过monty hall,30分钟题意只理解了一半。novice
那个host_count是个什么意思,为什么在0和1之间,然后为何<0 break? |
n****e 发帖数: 678 | 7 那个host_count是0, 1的原因是:
contestant先选了一个门, 只剩下两个门可以选了,所以,是0, 1
这里可以assume 只有3个门
这个问题还是很有名的,就是switch赢得概率大。
novice
【在 f********a 的大作中提到】 : host是知道门背后是不是山羊,所以不管第一次选手打开的是什么,host总打开一个山 : 羊的门。看来是我孤陋寡闻了,没见过monty hall,30分钟题意只理解了一半。novice : 那个host_count是个什么意思,为什么在0和1之间,然后为何<0 break?
|
f********a 发帖数: 165 | 8 懂了,多谢。可惜了机会。follow up的一个问题是为何不能每次rand之前都做一次
srand(time(NULL)),能否解释下?
【在 n****e 的大作中提到】 : 那个host_count是0, 1的原因是: : contestant先选了一个门, 只剩下两个门可以选了,所以,是0, 1 : 这里可以assume 只有3个门 : 这个问题还是很有名的,就是switch赢得概率大。 : : novice
|
n****e 发帖数: 678 | 9 这个链接的几个回答讲的很清楚:
http://stackoverflow.com/questions/7343833/srand-why-call-only-
我自己的面试感受也是也是如此。有时面试的题目刚好考到了自己的薄弱环节。只能说
一边面试,一边完善自己了。
多准备,多投几家公司,总会有公司给offers的。
【在 f********a 的大作中提到】 : 懂了,多谢。可惜了机会。follow up的一个问题是为何不能每次rand之前都做一次 : srand(time(NULL)),能否解释下?
|
z****e 发帖数: 54598 | 10 这题的trick就是当你选择了一门之后,主持人的行为会受到影响
然后下一步,当你再做选择的时候,会受主持人行为的影响
所以这有两层的关系,要做两次condition
两次之后就使得这个问题不那么直观了 |
|
|
f********a 发帖数: 165 | 11 大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后
host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是
实现一个function:
bool play_game(bool contestant_will_switch_doors)
输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个,
false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到
prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。
enum Door
{
goat,
prize
};
class Game
{
private:
vector vec;
int m_size;
public:
Game(int size){
m_size = size;
srand(time(NULL));
int ran = rand() % m_size;
for(int i=0; i< m_size; i++)
{
if(ran == i)
vec.push_back(prize);
else
vec.push_back(goat);
}
}
bool play_game(bool contestant_will_switch_doors) {
// contestant picks a door
// host reveals a door
// contestant switches or not
// determine if the contestant wins or not
}
};
int main() {
Game* g = new Game(3);
return 0;
} |
u*****o 发帖数: 1224 | 12 这个是著名的monty hall吧?
2/3的可能性是开始选的是goat, 这样switch必赢
1/3的可能性是开始选的是price,这样switch必输。
所以结论是应该换。 |
n****e 发帖数: 678 | 13 照着你的架构写写:
bool play_game(bool contestant_will_switch_doors) {
srand( time(NULL) );
int contestant_index = rand() % 3;
int host_count = rand() % 2;
int host_index;
for (host_index = 0; host_index < 3; host_index++) {
if (host_index != contestant_index) {
host_count--;
}
if (host_count < 0) {
break;
}
}
if (contestant_will_switch_doors) {
return vec[3- contestant_index - host_index] == prize;
} else {
return vec[contestant_index] == prize;
}
} |
z****e 发帖数: 54598 | 14 概率题,condition被改变了,所以换和不换的概率是不一样的 |
g*********e 发帖数: 14401 | 15 换不换取决于host是无意打开一扇门给你看的,还是host事先知道那个门背后是山羊。
如果host也是瞎蒙的,那就是50 50,无所谓。如果host知道那个后面是山羊,那就是1
/3, 2/3. |
f********a 发帖数: 165 | 16 host是知道门背后是不是山羊,所以不管第一次选手打开的是什么,host总打开一个山
羊的门。看来是我孤陋寡闻了,没见过monty hall,30分钟题意只理解了一半。novice
那个host_count是个什么意思,为什么在0和1之间,然后为何<0 break? |
n****e 发帖数: 678 | 17 那个host_count是0, 1的原因是:
contestant先选了一个门, 只剩下两个门可以选了,所以,是0, 1
这里可以assume 只有3个门
这个问题还是很有名的,就是switch赢得概率大。
novice
【在 f********a 的大作中提到】 : host是知道门背后是不是山羊,所以不管第一次选手打开的是什么,host总打开一个山 : 羊的门。看来是我孤陋寡闻了,没见过monty hall,30分钟题意只理解了一半。novice : 那个host_count是个什么意思,为什么在0和1之间,然后为何<0 break?
|
f********a 发帖数: 165 | 18 懂了,多谢。可惜了机会。follow up的一个问题是为何不能每次rand之前都做一次
srand(time(NULL)),能否解释下?
【在 n****e 的大作中提到】 : 那个host_count是0, 1的原因是: : contestant先选了一个门, 只剩下两个门可以选了,所以,是0, 1 : 这里可以assume 只有3个门 : 这个问题还是很有名的,就是switch赢得概率大。 : : novice
|
n****e 发帖数: 678 | 19 这个链接的几个回答讲的很清楚:
http://stackoverflow.com/questions/7343833/srand-why-call-only-
我自己的面试感受也是也是如此。有时面试的题目刚好考到了自己的薄弱环节。只能说
一边面试,一边完善自己了。
多准备,多投几家公司,总会有公司给offers的。
【在 f********a 的大作中提到】 : 懂了,多谢。可惜了机会。follow up的一个问题是为何不能每次rand之前都做一次 : srand(time(NULL)),能否解释下?
|
z****e 发帖数: 54598 | 20 这题的trick就是当你选择了一门之后,主持人的行为会受到影响
然后下一步,当你再做选择的时候,会受主持人行为的影响
所以这有两层的关系,要做两次condition
两次之后就使得这个问题不那么直观了 |
|
|
r****t 发帖数: 10904 | 21 换是 1/2 不换是 1/3 机会。
【在 f********a 的大作中提到】 : 大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后 : host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是 : 实现一个function: : bool play_game(bool contestant_will_switch_doors) : 输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个, : false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到 : prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。 : enum Door : { : goat,
|
m***9 发帖数: 1671 | 22 没有这么复杂吧,先随机一个1到3的数代表奖品位置,再随机一个1到3的数代表初次选
择的位置,如果两数相等,return 1-input. 如果两数不等,return input
【在 f********a 的大作中提到】 : 大概意思是有3个门,1个后面是prize,2个后面是goat, contestant选择一个门,然后 : host在剩下的两个门选择一个goat门打开,然后contestant可以选择switch门,问题是 : 实现一个function: : bool play_game(bool contestant_will_switch_doors) : 输入是true就是换门,false就是不换门,return是true就是最后选择到了prize那个, : false就是选择到了goat那个。很纠结 这个换门不换门其实最后都是50%的几率拿到 : prize。这是我的实现,没能做完。哪位能否实现这个function以及整个游戏。 : enum Door : { : goat,
|
b*****c 发帖数: 1103 | |