智力题
智力题
巴什博弈
巴什博弈(Bash game)是一个双人博弈:有一堆总数为n的物品,2名玩家轮流从中拿取物品。每次至少拿1件,至多拿m件,不能不拿,最终将物品拿完者获胜。
结论:如果n % (m + 1) == 0那么后手必胜,否则先手必胜
三人三鬼过桥
有三个人跟三个鬼要过河,河上没桥只有条小船,然后船一次只能渡一个人和一个鬼,或者两个鬼或者两个人,无论在哪边岸上,只有是人比鬼少的情况下(如两鬼一人,三鬼两人,三鬼一人)人会被鬼吃,然而船又一定需要人或鬼操作才能航行(要有人或鬼划船),问,如何安全的把三人三鬼渡过河对岸?
参考回答
- 先两鬼过去。在一鬼回来。对面有一鬼。这边有三人两鬼。
- 再两鬼过去。在一鬼回来。对面有两鬼。这边有三人一鬼。
- 再两人过去。一人一鬼回来。对面一人一鬼。这边两人两鬼。
- 最后两人过去。一鬼回来。对面三人。这边三鬼。
- 剩下的就三个鬼二个过去一个回来在接另外个就OK了。
赛马问题
**25匹马5条跑道找最快的3匹马,需要跑几次?**参考回答:7
将25匹马分成ABCDE5组,假设每组的排名就是A1>A2>A3>A4>A5,用边相连,这里比赛5次
第6次,每组的第一名进行比赛,可以找出最快的马,这里假设A1>B1>C1>D1>E1
D1,E1肯定进不了前3,直接排除掉
第7次,B1 C1 A2 B2 A3比赛,可以找出第二,第三名
所以最少比赛需要7次
**64匹马8条跑道找最快的4匹马,需要跑几次?**参考回答:11
思路与上述类似,最后剩9匹马找出第2、3名,需要比2次
给定随机函数,生成别的随机数
给定随机数,生成一个新的随机数
randN生成randK
randN()
可以生成1 - N的随机数
公式:t = N * (randN() - 1) + randN()
这个可以生成$1 - N^2$的随机数,比如randN取到1,那么这个公式就是取[1, N]
,取2,那么就是[N + 1, N * 2]
然后看需要生成的数是多少,那么就需要取他的倍数,超过倍数的就重新再生成,比如rand5生成rand7,那么1-25,7的倍数最大为21,如果大于21就重新调用rand7
最后在t % K + 1
|
|
砝码称轻重,找出最轻的
有一个天平,九个砝码(或者8个),其中一个砝码比另八个要轻一些,问至少要用天平称几次才能将轻的那个找出来? 2次
9个就是333分组
8个就是332分组
十组砝码每组十个,每个砝码都是10g重,但是现在其中有一组砝码每个都只有9g重,现有一个能显示克数的秤,最少称几次能找到轻的那组? 参考回答:1次
将砝码分组1~10,第一组拿一个,第二组拿两个以此类推。。第十组拿十个放到秤上称出克数x,则y = 550 - x,第y组就是轻的那组。
空瓶换饮料
1000瓶饮料,3个空瓶子能够换1瓶饮料,问最多能喝几瓶?
拿走3瓶,换回1瓶,相当于减少2瓶。但是最后剩下4瓶的时候例外,这时只能换1瓶。所以我们计算1000减2能减多少次,直到剩下4.(1000-4=996,996/2=498)所以1000减2能减498次直到剩下4瓶,最后剩下的4瓶还可以换一瓶,所以总共是1000+498+1=1499瓶。
毒药毒白鼠,找出哪个瓶子中是毒药
有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?
首先一共有1000瓶,2的10次方是1024,刚好大于1000,也就是说,1000瓶药品可以使用10位二进制数就可以表示。从第一个开始:
第一瓶 : 00 0000 0001
第二瓶: 00 0000 0010
第三瓶: 00 0000 0011
……
第999瓶: 11 1111 0010
第1000瓶: 11 1111 0011
需要十只老鼠,如果按顺序编号,ABCDEFGHIJ分别代表从低位到高位每一个位。 每只老鼠对应一个二进制位,如果该位上的数字为1,则给老鼠喝瓶里的药。
观察,若死亡的老鼠编号为:ACFGJ,一共死去五只老鼠,则对应的编号为 10 0110 0101,则有毒的药品为该编号的药品,转为十进制数为:613号。(这才是正解,当然前提是老鼠还没被撑死)
烧绳子问题
现有若干不均匀的绳子,烧完这根绳子需要一个小时,问如何准确计时15分钟,30分钟,45分钟,75分钟
计算15分钟:对折之后两头烧(要求对折之后绑的够紧,否则看45分钟解法)
计算30分钟:两头烧
计算45分钟:两根,一根两头烧一根一头烧,两头烧完过了30分钟,立即将第二根另一头点燃,到烧完又过15分钟,加起来45分钟
计算75分钟:将30和45分钟的方式加起来就可以了
在24小时里面时针分针秒针可以重合几次
时针分针可以重合22次
时针分针秒针只能重合2次,即0点和12点的时候
100个奴隶猜帽子颜色
一百个奴隶站成一纵列,每人头上随机带上黑色或白色的帽子,各人不知道自己帽子的颜色,但是能看见自己前面所有人帽子的颜色. 然后从最后一个奴隶开始,每人只能用同一种声调和音量说一个字:”黑”或”白”, 如果说中了自己帽子的颜色,就存活,说错了就拉出去斩了,说的参考回答所有奴隶都能听见。 是否说对,其他奴隶不知道。 在这之前,所有奴隶可以聚在一起商量策略,问如果奴隶都足够聪明而且反应足够快,100个人最大存活率是多少?
参考回答:这是一道经典推理题
1、最后一个人如果看到奇数顶黑帽子报“黑”否则报“白”,他可能死
2、其他人记住这个值(实际是黑帽奇偶数),在此之后当再听到黑时,黑帽数量减一
3、从倒数第二人开始,就有两个信息:记住的值与看到的值,相同报“白”,不同报“黑”
99人能100%存活,1人50%能活
另外,此题还有变种:每个奴隶只能看见前面一个人帽子颜色又能最多存活多少人?
参考回答:增加限制条件后,上面的方法就失效了,此时只能约定偶数位奴隶说他前一个人的帽子颜色,奇数奴隶获取信息100%存活,偶数奴隶50几率存活。
小猴子搬香蕉
一只猴子想要把身边的香蕉搬回家。它身边有 100 根香蕉;它家在离它目前位置 50 米远的地方;它每次最多只能搬运 50 根香蕉;它在行走过程中每走 1 米就要吃掉 1 根香蕉补充能量。请问,猴子最多能搬运多少根香蕉回家?
答案:
猴子首先搬运 50 根香蕉走 1 米,然后再折返回去,再搬运剩下的 50 根香蕉继续走 1 米。这个过程相当于搬运了所有的香蕉走了 1 米,与此同时消耗了 3 根香蕉。于是,我们可以理解成:搬运 50 根以上的香蕉的话,每走 1 米需要消耗 3 根香蕉。
这时,这道题的解可以理解成:猴子先搬运所有香蕉走足够长的距离(每走 1 米消耗 3 根香蕉),当香蕉数量接近 50 根的时候,这时猴子可以带着这 50 根直接回家(因为剩下的路程小于 50 米),未被消耗的香蕉数量就是可以带回家的香蕉数量。
那么搬运所有香蕉走多少米呢?实际上,就是解这个方程:50=100-3x,解得 x=16.666。由于 x 是整数,因此取 x 等于 16 或者 17。
这时,分情况讨论。当 x=16 时,猴子走了 16 米,此时香蕉还剩 100-163=52 根,遗弃 2 根,带着 50 根香蕉走完接下来的 34 米回到家中,未被消耗的香蕉数量是 50-34=16;当 x=17 时,猴子走了 17 米,此时香蕉还剩 100-173=49 根,带着这 49 根香蕉走完接下来的 33 米回到家中,未被消耗的香蕉数量是 49-33=16。
两种情况得到的结果都是 16,因此猴子最多能搬运 16 根香蕉回到家中。
高楼扔鸡蛋
有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点?
如果N = 1,那么就从第一层开始扔,最坏需要100次
如果N = 无穷,那么可以用二分
如果N等于2,那么比较正常的方法是两个鸡蛋A和B,A鸡蛋分别在10,20,30,40…,100的地方扔,如果A在k*10的地方碎了,那么B就从(k - 1)* 10 + 1
到(k - 1)* 10 + 9
的地方检查,那么最好是10次,最坏是19次
考虑到A、B两个鸡蛋检验的次数并不平衡,比如A无论丢1-10次,B都需要检验9次,那么是否可以让A检验次数变多,B检验次数变少呢?
那么可以让A在x次第一次检验,第二次在x + x -1处,第三次在x + x - 1 + x - 2,这样A多检验1次,B就少检验一次
x + x - 1 + … + 1 >= 100 那么x = 14
因此这种方法最少检测12次最多检测14次
火枪手决斗,谁活下来的概率大?
问题:彼此痛恨的甲、乙、丙三个枪手准备决斗。甲枪法最好,十发八中;乙枪法次之,十发六中;丙枪法最差,十发四中。如果三人同时开枪,并且每人每轮只发一枪;那么枪战后,谁活下来的机会大一些?
参考回答
一般人认为甲的枪法好,活下来的可能性大一些。但合乎推理的结论是,枪法最糟糕的丙活下来的几率最大。
那么我们先来分析一下各个枪手的策略。
如同田忌赛马一般,枪手甲一定要对枪手乙先。因为乙对甲的威胁要比丙对甲的威胁更大,甲应该首先干掉乙,这是甲的最佳策略。
同样的道理,枪手乙的最佳策略是第一枪瞄准甲。乙一旦将甲干掉,乙和丙进行对决,乙胜算的概率自然大很多。
枪手丙的最佳策略也是先对甲。乙的枪法毕竟比甲差一些,丙先把甲干掉再与乙进行对决,丙的存活概率还是要高一些。
我们根据分析来计算一下三个枪手在上述情况下的存活几率: 第一轮:甲射乙,乙射甲,丙射甲。 甲的活率为24%(40% X 60%)
乙的活率为20%(100% - 80%)
丙的活率为100%(无人射丙)。
由于丙100%存活率,因此根据上轮甲乙存活的情况来计算三人第二轮的存活几率:
情况1:甲活乙死(24% X 80% = 19.2%) 甲射丙,丙射甲:甲的活率为60%,丙的活率为20%。 情况2:乙活甲死(20% X 76% = 15.2%) 乙射丙,丙射乙:乙的活率为60%,丙的活率为40%。 情况3:甲乙同活(24% X 20% = 4.8%) 重复第一轮。 情况4:甲乙同死(76% X 80% = 60.8%) 枪战结束。
据此来计算三人活率: 甲的活率为(19.2% X 60%) + (4.8% X 24%) = 12.672% 乙的活率为(15.2% X 60%) + (4.8% X 20%) = 10.08% 丙的活率为(19.2% X 20%) + (15.2% X 40%) + (4.8% X 100%) + (60.8% X 100%) = 75.52%
通过对两轮枪战的详细概率计算,我们发现枪法最差的丙存活的几率最大,枪法较好的甲和乙的存活几率却远低于丙的存活几率。
掰巧克力问题或者参加辩论赛
1、掰巧克力问题 NM块巧克力,每次掰一块的一行或一列,掰成11的巧克力需要多少次?
2、1000个人参加辩论赛,1V1,输了就退出,需要安排多少场比赛?
参考回答
每次拿起一块巧克力,掰一下(无论横着还是竖着)都会变成两块,因为所有的巧克力共有NM块,所以要掰NM-1次,-1是因为最开始的一块是不用算进去的。
每一场辩论赛参加两个人,消失一个人,所以可以看作是每一场辩论赛减少一个人,直到最后剩下1个人,所以是1000-1=999场。
N只蚂蚁走树枝,问总距离或者总时间
问题:放N只蚂蚁在一条长度为M树枝上,蚂蚁与蚂蚁之间碰到就各自往反方向走,问总距离或者时间为多少?
参考回答:这个其实就一个诀窍:蚂蚁相碰就往反方向走,可以直接看做没有发生任何事:大家都相当于独立的
A蚂蚁与B蚂蚁相碰后你可以看做没有发生这次碰撞,这样无论是求时间还是距离都很简单了。
N个强盗分配M个金币,求方案使得自己分配最多
5个海盗抢到了100枚金币,每一颗都一样的大小和价值。 他们决定这么分:
- 抽签决定自己的号码(1,2,3,4,5)
- 首先,由1号提出分配方案,然后大家5人进行表决,当 半数以上的人同意时( 不包括半数,这是重点),按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
- 如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
- 依次类推……
假设每一位海盗都足够聪明,并且利益至上,能多分一枚金币绝不少分,那么1号海盗该怎么分金币才能使自己分到最多的金币呢?
参考回答
从后向前推,如果1至3号强盗都喂了鲨鱼,只剩4号和5号的话,5号一定投反对票让4号喂鲨鱼,以独吞全部金币。所以,4号惟有支持3号才能保命。
3号知道这一点,就会提出“100,0,0”的分配方案,对4号、5号一毛不拔而将全部金币归为已有,因为他知道4号一无所获但还是会投赞成票,再加上自己一票,他的方案即可通过。
不过,2号推知3号的方案,就会提出“98,0,1,1”的方案,即放弃3号,而给予4号和5号各一枚金币。由于该方案对于4号和5号来说比在3号分配时更为有利,他们将支持他而不希望他出局而由3号来分配。这样,2号将拿走98枚金币。
同样,2号的方案也会被1号所洞悉,1号并将提出(97,0,1,2,0)或(97,0,1,0,2)的方案,即放弃2号,而给3号一枚金币,同时给4号(或5号)2枚金币。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的票,1号的方案可获通过,97枚金币可轻松落入囊中。这无疑是1号能够获取最大收益的方案了!参考回答是:1号强盗分给3号1枚金币,分给4号或5号强盗2枚,自己独得97枚。分配方案可写成(97,0,1,2,0)或(97,0,1,0,2)。
test