由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 最近很hot startup一题
相关主题
srand()的问题问一道google的面试题
another GS inverview question, help!拓扑排序的题怎么做?
问一个题目binary tree的 serialization
large file的一道题写了个symmetric tree的stack based iterative实现,有个bug
判断BT是否BST?判断是不是binary search tree-leetcode
算法题:如何判断二叉树是AVL?hasPathSum
不用暴力,这道题有没有优化解G家电面
Time complexityfb面经的一题
相关话题的讨论汇总
话题: contestant话题: host话题: game话题: index话题: prize
进入JobHunting版参与讨论
1 (共1页)
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
两次之后就使得这个问题不那么直观了
相关主题
算法题:如何判断二叉树是AVL?问一道google的面试题
不用暴力,这道题有没有优化解拓扑排序的题怎么做?
Time complexitybinary tree的 serialization
进入JobHunting版参与讨论
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
两次之后就使得这个问题不那么直观了
相关主题
写了个symmetric tree的stack based iterative实现,有个bugG家电面
判断是不是binary search tree-leetcodefb面经的一题
hasPathSumG company intern host match
进入JobHunting版参与讨论
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
23
数学题
1 (共1页)
进入JobHunting版参与讨论
相关主题
fb面经的一题判断BT是否BST?
G company intern host match算法题:如何判断二叉树是AVL?
G家这是进入host match了吗?不用暴力,这道题有没有优化解
收到G家邮件,不太明白这是什么意思Time complexity
srand()的问题问一道google的面试题
another GS inverview question, help!拓扑排序的题怎么做?
问一个题目binary tree的 serialization
large file的一道题写了个symmetric tree的stack based iterative实现,有个bug
相关话题的讨论汇总
话题: contestant话题: host话题: game话题: index话题: prize