楼层丢鸡蛋
有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。
之前有看过,似乎比较好的方法是取平方根sqrt(n),从下往上,每sqrt(n)层楼丢一次,直到一个鸡蛋碎了。然后再从上一次没碎的地方开始向上逐层遍历。这样比较均衡,最好情况是在第10层碎掉,尝试次数为 1 + 9 = 10次。最坏的情况是在第100层碎掉,尝试次数为 10 + 9 = 19次。
最好的方法是动态规划,比较复杂,这里就不看了。
最优解,解方程法:
假设要尽量使得最坏情况下扔鸡蛋的次数也是最少的。假设最坏情况下要扔x次,那么第一次在第x层扔鸡蛋,碎了,然后第二个鸡蛋从第1层扔到x-1层,最坏情况下总共扔x次,刚刚好。但是如果第x层没碎,那么要继续往上跳,如果跳到2x的楼层扔,碎了,然后第二个鸡蛋从x+1层扔到2x-1层,就会导致最坏情况下,总共扔了x+1次鸡蛋(x层没碎那次也计入在内),因此第二次应该跳到2x-1处扔,同理,第三次就是加x-2层处扔。
解方程x+(x-1)+(x-2)+…+1=(1+x)/2 *x = 100, x=14。
赛马问题
题目
有 25 匹马和 5 条赛道,赛马过程无法进行计时,只能知道相对快慢。问最少需要几场赛马可以知道前 3 名。
答案
先把 25 匹马分成 5 组,进行 5 场赛马,得到每组的排名。再将每组的第 1 名选出,进行 1 场赛马,按照这场的排名将 5 组先后标为 A、B、C、D、E。可以知道,A 组的第 1 名就是所有 25 匹马的第 1 名。而第 2、3 名只可能在 A 组的 2、3 名,B 组的第 1、2 名,和 C 组的第 1 名,总共 5 匹马,让这 5 匹马再进行 1 场赛马,前两名就是第 2、3 名。所以总共是 5+1+1=7 场赛马。
圆桌摆圆棋子
圆桌,圆棋子,甲乙先后放棋子,谁放不下谁就输了,现在你第一个放,你有什么策略可以必赢?
做法:第一步先放圆心位置,然后乙放了一个棋子下去,那我就放它的对称的位置。以此类推,只要乙能放棋子,那么对称的位置肯定也能放,直到乙放不下棋子,他就输了。
甲乙轮流抛硬币
题目
甲乙两人轮流投硬币,先投出正面的赢,那么甲和乙获胜的概率分别是多少?
答案
第一轮,甲赢:1/2,乙赢:1/2*1/2=1/4
第二轮,甲赢:1/2*1/2*1/2=1/8,乙赢:1/2*1/2*1/2*1/2=1/16
第三轮:甲赢:1/16*1/2=1/32,乙赢:1/32*1/2=1/64
先考虑甲赢的概率。这是个无限等比数列,首项是二分之一,公比是四分之一 ,即甲赢的概率为此等比数列的所有项的和,1/2+1/8+1/32+1/128+…求极限为2/3,所以甲赢的概率是2/3,乙是1/3。(完了,过了几个月已经忘记怎么求极限了)
如果不用求极限的方法,可以用等比序列求和公式,或者直接对比甲乙的大小,可以发现甲赢的概率是乙的两倍。
老鼠毒药问题
题目
有1000个被隔离的疑似病人,使用试剂盒检测1周后才会出结果。假设已知其中只有1人生病,假设试剂盒的准确率100%,请问最少需要多少个试剂盒才能在1周时间内检测出病人?
答案
编号0~999,二进制总共10bit,使用10个试剂盒,一个试剂盒对应一个bit。每个人编号转换为二进制数,一个试剂盒检测,那些这个位为1 的人的混合样本。
最后,假设有x个试剂盒检测出有病,那么他们组合起来对应的那个二进制数,就是那个病人的编号,因为只有他是让他所有对应的二进制位的那些试剂盒全部检测出问题的。
两堆苹果轮流取
题目
两个盘子,一个盘子有7个苹果,另一个有10个苹果。现在轮流取苹果,一次只能从其中一个盘子取,可以取任意个,不可以不取。最后把所有苹果取完的人输。现在你先取,那你是必胜,还是必败,还是怎么样?15分钟时间思考。
答案
当时我给出的解答(应该是正确的),我首先取3个苹果,变成7 7,然后无论对面取多少个,我都在另一堆里取相同的数量。
- 对面取完7个,那我取另一堆的6个,剩下一个给他
- 对面取6个,我取完另一堆,也剩下一个给他
- 对面取5个,我也取5个。变成2 2,接下来无论他怎么取都输
- 对面取4个或以下,同样我也可以赢。
1000个苹果,要求篮子数尽量少
1000个苹果,若干个篮子,问如何放,才能够给出1~1000的数字时,你能够拿出这么多的苹果?要求每个篮子要么全拿出来,要么不拿,要求篮子数尽量少。
参考二进制吧。可以用10个篮子。分别装1、2、4、8这样的苹果数,然后给出一个数字的时候,把它分成2的几次方加2的几次方这样,然后把对应的篮子的苹果拿出来就行了。(至于苹果只有1000个的问题,解决方法就是,最后一个篮子放剩下的489个苹果,那么当他要小于512个苹果的时候由前9个篮子凑,多于512个苹果的时候,就减去489,然后剩下的由剩下的篮子来凑就行了)