您的位置:首页 > 其它

trick problems

2016-03-17 21:54 127 查看


2刀分7天工资

Q:老板有一块金子,恰好是程序员Zing一周的工资,每天工资一样。老板需要每天向Zing支付工资,不得多付,不得拖欠,仅允许对金子切2刀。问解决方案。

A:把金子分为1/7,2/7,4/7。第一天支付1/7,第二天拿2/7换1/7,第三天再给1/7,第四天拿4/7换1/7和2/7...


海盗分赃问题

Q:5个海盗抢到100个金币,每个一样大。5人按照顺序提出分配方案,然后所有人表决,半数以上人同意时采用该分配方案,否则将提方案的人丢进大海喂鲨鱼。

前提:海盗的决策都是聪明的,海盗都是贪婪而且残忍的。

A: 从后往前考虑
若前3个都被扔到海里,只剩下4和5,4不可能获得一半以上的票数,那么4只有死路一条,因此无论3什么提案都要同意。
那么对于3来说,干掉1和2之后,只剩下3人,有了自己和4那一票,无论自己什么提案都可以通过,因此提出100,0,0
对于2来说,若要使自己的提案通过,还需要拉拢2票。因此需要给出的offer比3的提案更好,因此只能拉拢4和5两人,98,0,1,1
对于1来说,也需要拉拢2票,所有最优的提案是97,0,1,2,0或97,0,1,0,2


百人开灯

Q:房间里头有100个灯对应100个开关,按顺序从1到100编号,初始全部灯均关闭。门外有100个人,按顺序1到100编号,每个人依次进入,且必须开或关 那些灯的编号可以整除自己编号的开关。问所有人经过后,房间里有哪些灯是亮的。

A:这道题其实是问每个数的因数个数是奇数还是偶数。任意数n的因数都是成对出现的,1和n,a和n/a等等,但是这其中有一个特殊情况,若a=n/a那么因数的个数就变成奇数了。所以房间里1,4,9,25,36,49,64,81(n^2<=100)是亮的。


5L和3L杯子量4L水

Q:只有5L和3L的无刻度杯子各一个,水无限,要求量出4L水

A:思路是4=3+1,4=5-1
4=3+1:3L杯子装满,倒到5L杯子中,3L杯子再装满,倒到5L杯子直到5L杯子满,此时3L杯子中剩下1L水。把5L杯子里的水倒掉,3L杯子中的1L倒入5L杯子中,3L杯子再装满,倒到5L杯子中。
4=5-1:5L杯子装满,倒到3L杯子中直到3L杯子满,此时5L杯子中剩下2L,3L杯子中的水倒掉,把5L杯子中的2L水倒到3L杯子中,5L杯子水装满,然后往3L杯子倒水直到3L杯子满。


烧绳子

Q:两根燃烧速度不均匀的绳子,但是烧完均60分钟,要求计时30分钟和45分钟。

A:30分钟:一根绳子两头同时点着,烧尽即为30分钟。45分钟,第一个绳子两头同时点着,同时第二根绳子点着一头,当第一根绳子烧尽的时候把第二根绳子另一头也点上,第二根绳子烧尽即为45分钟。


兔子试毒药

Q:有1000瓶药水,其中只有1瓶是毒药,兔子喝毒药1天后才会死,问最少用几只兔子能找到那瓶毒药?

A:2^9<1000<2^10,因此最少10只兔子可以试出毒药。解决方法是,将10只兔子进行编号10到1表示2进制从高位到低位,将1000瓶药水进行编号1到1000。将药水编号转化为2进制,哪些位置上为1,喂给对应的兔子,如7号药水2进制是 0000000111 ,喂给1、2、3号兔子。1天后,观察哪些兔子死了,将死亡兔子位置设为1,转换为10进制则是对应的毒药。若只有1、2、3号兔子死亡,则0000000111=7号药水有毒。


拿球问题

Q:现在有100各球,甲乙两人轮流拿球,每人每次只能拿1-5个球,拿到最后一个球为胜者。若甲先拿球,有办法保证甲一定获胜吗?如果有甲应该如何拿。

A:从后往前推,若甲拿到第94个球,则无论已如何拿,甲总能拿到第100个球。为了保证拿到第94个球,甲必须保证拿到第88个球。以此类推,甲必须拿到第(100-n*6)个球。因此为了获胜,甲第一次需要拿4个球,之后每次根据乙拿x个,甲再拿(6-x)即可。


青蛙跳楼梯

Q:有100阶楼梯,小青蛙一次能跳1阶、2阶或3阶。求问小青蛙恰好跳到第100阶,有多少种跳法?

A:这道题用动态规划解决,定义d[i]=n为跳到第i阶有n种方法。则有:对于i=100,小青蛙可以先跳到99阶,再跳1阶到100;也可以跳到98阶,再跳2阶到100(不能跳1+1,因为会和99重复);也可以跳到97阶,再跳3阶到100。d[i]=d[i-1]+d[i-2]+d[i-3]

Q:现在小青蛙长成大青蛙了,大青蛙可以一次跳1、2、3、...、n阶楼梯,求问大青蛙有多少种方法跳n阶。

A:对于这道题再用动态规划就把问题复杂化了。转化一种思路。总共n阶楼梯,第n阶肯定要到达,那么剩下的n-1阶,每一阶大青蛙可能落到也可能跳过(0或1),可以当作一个n-1位的2进制数,因此很直接的有2^(n-1)种可能。


天堂与地狱

Q:你来到一个天堂和地狱的岔路口,但是不知道哪边是通往天堂哪边通往低于。岔路口有两个人,都直到路往何方,但是其中一个只有说实话,一个只会说假话,你并不认识他们,你可以向两人问相同的问题,若要去天堂,该如何问?

A:你可以这么问“若我问另外一个人地狱怎么走,他会指哪条路?”。无论问哪个人,都会指向同一条路,且这条路就是通向天堂的路。
True
and False = False and True = False


转载自Zing!郑申申的博客 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: