微软前CEO鲍尔莫的猜数字面试题
最近翻阅到一个文章,讲的是鲍尔莫的面试题。
微软的前 CEO 鲍尔莫曾经在采访中透露,他会问面试微软的候选人一个问题。
最近翻阅到一个文章,讲的是鲍尔莫的面试题。
微软的前 CEO 鲍尔莫曾经在采访中透露,他会问面试微软的候选人一个问题。
我要跟你玩一个游戏。
我在心里选择一个1到100之间的整数,你来猜这个数字。每次猜完,我会告诉你,答案比你猜的大还是小。如果猜错,你可以接着猜,直到猜中为止。
如果你只用一次就猜中,我给你5美元,用两次猜中我给你4美元,三次3美元,四次2美元,五次1美元,六次0美元。
你还是没猜中的话,就要倒贴钱了。七次猜中,你给我1美元,八次2美元,九次3美元。
请问你应该玩这个游戏吗?
这个问题的关键在于计算这个猜测数据结果的期望。可以细分1到100,猜测这个数据用到的次数,并计算单数据的赚钱结果,然后再统计整体的期望值。
先抽象一个方法,猜测单个数据用的次数。这里我利用二分查找法,写了一个方法,并把每次猜的的结果也记录了。
/// /// 猜数过程 /// /// /// static List GuessNumber(int n) { var times = new List(); int min = 1; int max = 100; int mid = (min + max) / 2; times.Add(mid); while (mid != n) { if (n < mid) { max = mid - 1; } else { min = mid + 1; } mid = (min + max) / 2; times.Add(mid); } return times; }然后再统计全部期望。
static void Main(string[] args){ int i = 1; decimal exp = 0; int b = 5; // 一次猜中得5元,多1次少1元 while (i