三人三鬼过桥
题目:
有三个人跟三个鬼要过河,河上没桥,只有条小船
船一次只能渡一个人和一个鬼,或者两个鬼,或者两个人
无论在哪边岸上,只要是人比鬼少的情况下(比如:两鬼一人,三鬼两人,三鬼一人),人都会被鬼吃
然而船又一定需要人或鬼操作才能航行
问:如何安全的把三人三鬼渡过河对岸
思路:
先两鬼过去,再一鬼回来。此时:对面有一鬼,这边有三人两鬼
接着两鬼过去,再一鬼回来。此时:对面有两鬼,这边有三人一鬼
然后两人过去,再一人一鬼回来。此时:对面一人一鬼,这边两人两鬼
最后两人过去,再一鬼回来。此时:对面三人,这边三鬼
剩下的三个鬼,两个过去,一个回来再接另一个即可
小猴子搬香蕉
问题:
一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉(多了就被压死了)
它每走1米就要吃掉一根香蕉,请问它最多能把多少根香蕉搬到家里
思路:
这道题的关键是,把香蕉的搬运过程分为两个阶段:
第一阶段是将香蕉来回搬运,当香蕉数目大于50根时,猴子每搬一米需要吃掉三根香蕉
第二阶段是直接搬香蕉,当香蕉数小于等于50根时
因此第一个阶段,将香蕉分为A和B两箱,把这两箱香蕉往前搬一米需要花费三根香蕉
因此,当走到17米的时候,还剩下49根香蕉(100 - 3 * 17
),就代表此时可以一直往前走,不用来回搬运香蕉了
而在第二个阶段,此时还剩下50 - 17 = 33
米还没有走完,因此还需要再消耗33根香蕉
所以最后还剩下49 - 33 = 16
根香蕉
强盗分金币
问题:
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]
的分配方案
因为3号知道4号即使一无所获但还是会投赞成票(如果投了反对,就回到上一步了),再加上自己一票,他的方案即可通过
而2号也知道这一点,就会提出[98,0,1,1]
的方案
由于该方案对于4号和5号来说比在3号分配时更为有利,他们将支持他而不希望他出局
同样1号也知道这一点,就会提出[97,0,1,2,0]
或[97,0,1,0,2]
的方案
对于此时的方案一,给3号一个金币和给4号两个金币的方案,明显由于2号的方案,所以3号和4号会给1号投赞成票
再加上1号自己的票,即可通过
而对于方案二来说,给3号一个金币和给5号两个金币的方案,明显优于2号的方案,同理
总结:最终的分配方案为[97,0,1,2,0]
或[97,0,1,0,2]
空瓶换饮料
题目:1000瓶饮料,3个空瓶子能够换1瓶饮料,问最多能喝几瓶?
思路:
先留下1瓶饮料(就当作是向店家借的那一瓶)
接着可以认为先向店家借一瓶,自己拿两瓶,此时总共就有3瓶
那么就得到三个空瓶子,换得一瓶饮料,然后还给店家一瓶,即无拖无欠
所以就只要在原有瓶数的基础上,再计算有多少个两瓶即可
即1000 + (1000 - 1) / 2 = 1499
瓶
称重类问题
问题一:有一个天平,九个砝码,其中一个砝码比另八个要轻一些,问最少要称几次才能找到轻的砝码
答案:2次
第一次:
在称的两边各放3个砝码:哪边轻就代表轻的砝码在哪边;一样重就代表轻的砝码在剩余的砝码中
第二次:
找到存在轻砝码的那三个砝码,在称的两边各放1个砝码:哪边轻就是哪个;两边一样重,那么轻的砝码就是剩余的砝码
问题二:十组砝码每组十个砝码,每个砝码都是10g重,但现在其中有一组砝码每个都只有9g重,现有一个能显示克数的秤,最少称几次能找到轻的那组?
答案:1次
将砝码分组1~10,第一组拿一个,第二组拿两个,以此类推
将所有的砝码一起放到秤上称重,得到克数x
,设y = 550 - x
,则第y
组就是轻的那组
问题三:有四瓶药,但有一个是重的,只有一台称,只许称一次,找出那瓶是重的
思路:
将药随机分为两组,称一次称
设比较重的一边是A,轻一点的是B
接着从A中随机抽出一瓶,从B中也随机抽出一瓶
如果此时秤的左右两边是相等的,那么重的那一瓶就是从A中抽出的
否则就是A中还在称上的那一瓶
舀酒问题
问题:两个舀酒的勺子,分别能舀7两和11两酒,如何舀出2两酒
思路:
先舀7两倒到11两勺里
再舀7两倒到11两勺里,此时7两的勺里剩3两
把11两勺里的酒倒掉,把7两的勺里剩的3两倒入
再舀凳橡枝7两倒到11两勺里,此时11两的勺里还可以装11 - (3 + 7) =1
两
再舀7两倒到11两勺里,7两勺剩7 - 1 = 6
两
把11两勺里的酒倒掉,把6两倒入,11两的勺里还可以装11 - 6 = 5
两
再舀7两倒到11两勺里,7两勺剩7 - 5 = 2
两
毒药毒白鼠
问题一:
有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药
任何喝下毒药的生命都会在一星期之后死亡
现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?
思路:
首先一共有1000瓶,而$2^{10}$是1024,刚好大于1000,也就是说,1000瓶药品可以使用10位二进制数就可以表示
即,第一瓶:00 0000 0001,第二瓶:00 0000 0010,第三瓶:00 0000 0011,以此类推
将当前的十只老鼠按顺序编号A、B、C、D、E、F、G、H、I、J,分别代表从低位到高位每一个位
每只老鼠对应一个二进制位,比如说数字5,那么对应的就是3号老鼠和1号老鼠,即让3号老鼠和1号老鼠喝下第五瓶水
观察:若死去的老鼠为1号老鼠和3号老鼠,就代表第五瓶水是毒药
问题二:
8瓶酒一瓶有毒,用小老鼠测试。每次测试结果8小时后才会得出
只有8个小时的时间。最少需要几只老鼠测试?
答案:3只
思路同上,用三位二进制表示8瓶酒
其中,第一个老鼠喝下最低位为1对应的酒,第二个老鼠喝下中间位为1对应的酒,第三个老鼠喝下最高位为1对应的酒
最后将所有中毒的老鼠,对应的位次进行与操作即可以知道那瓶毒药有毒了
先手必胜问题
问题:100本书,两个人依次拿书,你先拿,每次能够拿1-5本书,怎么拿能保证最后一次是你拿?
思路:
试想,如果最后一次是我拿的书,那么此时剩下的书的数量必然要是1-5本
也就是说,在上一次拿书的过程中,也就是对方的拿书的时候,此时最少要剩下6本书
那么只要保持每个回合结束后都剩下6的倍数,并且在这个回合中保证我拿的和对方拿的加起来为6(这样这个回合结束后剩下的还是6的倍数)
就能够保证最后一次拿书是我拿的
因此需要保证书的数量始终是6的倍数,所以第一次先手拿书要拿100 % 6 = 4
本书
辩论赛数量
问题:1000个人参加辩论赛,1V1,输了就退出,需要安排多少场比赛?
思路:
每一场辩论赛参加两个人,消失一个人
所以可以看作是每一场辩论赛减少一个人,直到最后剩下1个人
因此是1000 - 1 = 999
场
奴隶猜帽子颜色
问题一:
100个奴隶站成一纵列,每人头上随机带上黑色或白色的帽子,同时每个人都不知道自己帽子的颜色,但能看见自己前面所有人帽子的颜色
然后从最后一个奴隶开始,每人只能用同一种声调和音量说一个字:”黑”或”白”
如果说中了自己帽子的颜色,就存活,说错了就拉出去斩了,每个人说的答案所有奴隶都能听见,但是否说对,其他奴隶不知道
在这之前,所有奴隶可以聚在一起商量策略
问如果奴隶都足够聪明而且反应足够快,100个奴隶最大存活率是多少?
思路:
最后一个人如果看到奇数顶黑帽子报“黑”,否则报“白”(注意:他此时是必然不知道自己的帽子颜色是什么,所以有50%
的概率死掉)
然后从倒数第二个人开始,如果前一个人说的是“黑”,同时他本人看到后面有奇数顶黑色帽子
就代表自己是白色帽子,因此就会说“白”
后面的人便以此类推
总结规律便是:
假设后面有奇数顶帽子为“黑”,有偶数顶帽子为“白”
如果后面看到的和前面的人说的相同,就报“白”;否则就报“黑”
因此最后的结果就是99人能100%存活,1人50%能活
问题二:
在上面的基础上,给定限定条件:每个奴隶只能看见前面一个人帽子颜色又能最多存活多少人?
思路:
此时只能约定偶数位奴隶说他前一个人的帽子颜色
因此:奇数位置的奴隶100%
存活,偶数位置的奴隶50%
存活
利用烧绳子计算时间
问题:
现有若干条不均匀的绳子,烧完每一根绳子都需要花费一个小时
问如何准确计时:15分钟、30分钟、45分钟、75分钟
思路:
计算15分钟:将绳子对折,然后从两端开始烧(即从四个端点燃烧绳子)
计算30分钟:从绳子的两端分别开始燃烧
计算45分钟:
拿两根绳子,一根从两端烧,另一根从一端烧
两端烧的绳子烧完后即过了30分钟
此时立即将第二根另一头点燃(PS:此时的第二根绳子如果继续用一端燃烧,还可以烧30分钟,而如果从两端烧,就只能烧15分钟)
待这根绳子烧完便是15分钟
因此一共加起来便是45分钟
计算75分钟:等价于30分钟+45分钟
飞机绕地球
问题:
一箱油可供一架飞机绕地球飞半圈
一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机
答案:三架(前提是允许其他两架飞机可以飞不回来)
a和b全程顺时针飞,b在a起飞到四分之一处时,把油全部给a,接着b坠毁
c在a飞到一半时逆时针从机场起飞,c和a相遇时把油全部给a,c坠毁,a刚好回到基地
老虎吃羊
问题:
一百只老虎和一只羊共同生活在一个只有草的魔法岛上。老虎可以吃草,但它们更喜欢吃羊
其中:每次一只老虎只能吃一只羊,并且吃完后老虎会变成羊
所有的老虎都很精明,并且都想活下去
问:羊会被吃掉吗?
思路:
这类题目需要先降低数量,简化问题,从而找出规律
如果有1只老虎,它肯定会吃掉羊,因为它不用担心变成羊后会被吃掉
如果有2只老虎,因为两只老虎都很精明,都清楚如果自己吃掉羊后变成羊,就会被另一只老虎吃掉,所以结果是谁也不去吃羊
如果有3只老虎,如果其中一只老虎吃掉一只羊后变身,剩下的两只老虎不会再继续吃羊,所以第一只老虎把羊吃掉
如果有4只老虎,每只老虎都知道如果它吃了羊,它就会变成羊。还剩下3只老虎,它还是会被吃掉的。所以为了保证最大的生存可能性,没有老虎会吃羊肉
同样的逻辑,可以证明:如果老虎的数量是偶数,羊就不会被吃掉。如果数字是奇数,羊就会被吃掉
因此对于100只老虎的情况,羊不会被吃掉
翻转硬币
题目:
有23枚硬币在桌上,其中10枚正面朝上.蒙住眼睛(无法分清硬币正反,但可以翻转硬币)
问如何操作能将硬币分成两组,让两组硬币正面朝上的硬币数量一样多
思路:
将这23枚硬币分成10个、13个两组
然后将10个一组的所有硬币翻转,这时两堆正面朝上的硬币个数就一样了
因为总共就只有十个硬币是正面的,假设有x
个正面的在10个的这一组,那么就有10 - x
个在13个的这一组
因此只要翻转10个的这一组,那么此时在10个硬币的一边,就有10 - x
正面的硬币了
赛马类问题
背景:只知道每次赛马中马的名次,而不知道每匹马具体的速度
25匹马,5条跑道,找最快的3匹马,最少需要跑几次?
答案:7次
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
A1 | B1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | E2 |
A3 | B3 | C3 | D3 | E3 |
A4 | B4 | C4 | D4 | E4 |
A5 | B5 | C5 | D5 | E5 |
5次(将25匹马分为A、B、C、D、E五个组,每个组内先跑一次)
1次(将每组的第一名,即A1、B1、C1、D1、E1,放在一起跑一次)
1次(假设A1>B1>C1>D1>E1,则现在需要找top2和top3;因此将A2、A3、B1、B2、C1,放在一次跑一次;这里面的top1和top2,便是总排名的top2和top3)
25匹马,5条跑道,找最快的5匹马,最少需要跑几次?
答案:最少8次,最多9次
预处理:
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
A1 | B1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | E2 |
A3 | B3 | C3 | D3 | E3 |
A4 | B4 | C4 | D4 | E4 |
A5 | B5 | C5 | D5 | E5 |
5次(将25匹马分为A、B、C、D、E五个组,每个组内先跑一次)
1次(将每组的第一名,即A1、B1、C1、D1、E1,放在一起跑一次)
1次(假设A1>B1>C1>D1>E1,则现在需要找top2和top3;因此将A2、A3、B1、B2、C1,放在一次跑一次;这里面的top1和top2,便是总排名的top2和top3)
重点是根据不同的情况找到top4和top5
情况一:8场比赛
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
Top1 | B1 | C1 | D1 | E1 |
Top2 | B2 | C2 | D2 | |
Top3 | B3 | C3 | ||
A4 | B4 | |||
A5 |
在此种情况下top4只能在A4、B1中产生
如果第4名=A4,那么第5名只能在A5、B1中产生
如果第4名=B1,那么第5名只能在A4、B2、C1中产生
则top4和top5需要在马匹[A4、A5、B1、B2、C1]
五匹马中产生
因此只需要额外再来一场比赛即可
情况二:9场比赛
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
Top1 | Top2 | C1 | D1 | E1 |
Top3 | B2 | C2 | D2 | |
A3 | B3 | C3 | ||
A4 | B4 | |||
A5 |
在此种情况下第4名只能在A3、B2、C1中产生
如果第4名=A3,那么第5名只能在A4、B2、C1中产生
如果第4名=B2,那么第5名只能在A3、B3、C1中产生
如果第4名=C1,那么第5名只能在A3、B2、C2、D1中产生
则top4和top5需要在马匹[A3、A4、B2、B3、C1、C2、D1]
七匹马中产生
因此还得再比赛两场才能找到top4和top5
情况三:9场比赛
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
Top1 | Top2 | C1 | D1 | E1 |
A2 | Top3 | C2 | D2 | |
A3 | B3 | C3 | ||
A4 | B4 | |||
A5 |
在此种情况下第4名只能在A2、B3、C1中产生
如果第4名=A2,那么第5名只能在A3、B3、C1中产生
如果第4名=B3,那么第5名只能在A2、B4、C1中产生
如果第4名=C1,那么第5名只能在A2、B3、C2、D1中产生
则top4和top5需要在马匹[A2、B3、B4、C1、A3、C2、D1]
七匹马中产生
因此还得再比赛两场才能找到top4和top5
情况四:9场比赛
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
Top1 | Top2 | Top3 | D1 | E1 |
A2 | B2 | C2 | D2 | |
A3 | B3 | C3 | ||
A4 | B4 | |||
A5 |
在此种情况下第4名只能在A2、B2、C2、D1中产生
如果第4名=A2,那么第5名只能在A3、B2、C2、D1中产生
如果第4名=B2,那么第5名只能在A2、B3、C2、D1中产生
如果第4名=C2,那么第5名只能在A2、B2、C3、D1中产生
如果第4名=D1,那么第5名只能在A2、B2、C2、D2、E2中产生
则top4和top5需要在马匹[A2、B2、C2、D1、A3、B3、C3、D2、E1]
九匹马中产生
因此还得再比赛两场才能找到top4和top5
情况五:9场比赛
A组 | B组 | C组 | D组 | E组 |
---|---|---|---|---|
Top1 | Top3 | C1 | D1 | E1 |
Top2 | B2 | C2 | D2 | |
A3 | B3 | C3 | ||
A4 | B4 | |||
A5 |
在此种情况下第4名只能在A3、B2、C1中产生
如果第4名=A3,那么第5名只能在A4、B2、C1中产生
如果第4名=B2,那么第5名只能在A3、B3、C1中产生
如果第4名=C1,那么第5名只能在A3、B2、C2、D1中产生
则top4和top5需要在马匹[A3、B2、B3、C1、A4、C2、D1]
七匹马中产生
因此还得再比赛两场才能找到top4和top5
64匹马,8条跑道,找最快的4匹马,最少需要跑几次?
答案:最少10次,最多11次
思路:
A1 | B1 | C1 | D1 | E1 | F1 | G1 | H1 |
---|---|---|---|---|---|---|---|
A2 | B2 | C2 | D2 | E2 | F2 | G2 | H2 |
A3 | B3 | C3 | D3 | E3 | F3 | G3 | H3 |
A4 | B4 | C4 | D4 | E4 | F4 | G4 | H4 |
A5 | B5 | C5 | D5 | E5 | F5 | G5 | H5 |
A6 | B6 | C6 | D6 | E6 | F6 | G6 | H6 |
A7 | B7 | C7 | D7 | E7 | F7 | G7 | H7 |
A8 | B8 | C8 | D8 | E8 | F8 | G8 | H8 |
第一轮:8场(先将64匹马分为8组,各个组组内进行赛跑;同时会淘汰每组的后4名)
A1 | B1 | C1 | D1 | E1 | F1 | G1 | H1 |
---|---|---|---|---|---|---|---|
A2 | B2 | C2 | D2 | E2 | F2 | G2 | H2 |
A3 | B3 | C3 | D3 | E3 | F3 | G3 | H3 |
A4 | B4 | C4 | D4 | E4 | F4 | G4 | H4 |
第二轮:1场(每组的第一名进行一次赛跑;会再淘汰一部分)
A1 | B1 | C1 | D1 | ||||
---|---|---|---|---|---|---|---|
A2 | B2 | C2 | |||||
A3 | B3 | ||||||
A4 |
第三轮:先选择B1、C1、A2、B2、C2、A3、B3、A4进行赛跑,然后分情况进行探讨:
情况一(11场):
如果C1以第二名的成绩晋级(除D1比赛中的第二名,已知B1>C1,所以C1不可能是第一名)
那么最终第三名(除D1比赛中的第三名)在A2-4、B2-3、C2中产生
并不能知道D1与它们的快慢,所以需要D1与A2-4、B2-3、C2共7匹马再进行一次比赛
第一名进入TOP4(是总成绩中的第四名)
情况二(10场):
如果C1以第三至七名的成绩完赛(除D1的比赛,已知C1>D1,所以C1不可能是第八名)
那么除D1这8匹马中的前三名就直接进入TOP4(总成绩中的第二、三、四名)
无需进行加赛
概率类问题
不等概率实现等概率
问题:
给定一个函数,有p0概率返回0,p1概率返回1,保证p0+p1=1
利用给定函数,实现一个新的函数:使得有50%的概率返回0,50%的概率返回1
思路:
如果p0 = 1,p1 = 1或者p0 = 0,p1 = 0就重新来过
否则:出现p0 = 1,p1 = 0,就返回1
p0 = 0,p1 = 1,就返回0
先抛硬币获胜的概率
题目:两个人轮流抛硬币,谁先抛出正面就获胜,先抛的人获胜的概率是多少
思路:假设A先,B后
P(A) = 1/2 + // A直接取胜
1/2 * 1/2 * 1/2 + // A1失败B1失败A2取胜
1/2 * 1/2 * 1/2 * 1/2 * 1/2 + // A1失败B1失败A2失败B2失败A3取胜
...
P(A) = 1/2 + (1/2) ^ 3 + (1/2) ^ 5 + (1/2) ^ 7 + ... = 1/2 * (1 - (1/4) ^ n) / (1 - 1/4) = 2/3
P(B) = 1/2 * 1/2 + // A1失败B1取胜
1/2 * 1/2 * 1/2 * 1/2 + // A1失败B1失败A2失败B2取胜
1/2 * 1/2 * 1/2 * 1/2 * 1/2 * 1/2 + // A1失败B1失败A2失败B2失败A3失败B3取胜
...
P(B) = (1/2) ^ 2 + (1/2) ^ 4 + (1/2) ^ 6 + ... = 1/4 * (1 - (1/4) ^ n) / (1 - 1/4) = 1/3
由此可见,先抛的人获胜的概率更大,为2/3
大小王在同一个人手上的概率
问题:
在斗地主中共有54张牌,地主20张,两个农民各17张牌
求大小王同时在一个人手上的概率
思路:
P = (2 * C(17,2) + (C(17,2) + C(3,2) + C(17,1) * C(3,1))) / C(54,2)
// 这里的分子和分母都忽略了大小王交换的情况(等价于分子分母同时除以2)
= (2 * C(17,2) + C(20,2)) / C(54,2)
= 17/53 + 3/(53*27)
= 32.29%
/*
分母的第一个式子是指两个农民各自手上拿到大小王的情况
分母的第二个式子是指是地主拿到的情况,而地主又分为:
大小王在已分配的手牌中
大小王在额外分配的三张手牌中
大小王有一张在地主牌中,另一张在已分配的手牌中
*/
圆内锐角三角性的概率
问题:
求圆上任取三个点组成锐角三角形的概率
答案:1/4
如下图所示,假设圆半径为1。首先固定住A点,我们把A点作为三角形的第一个点
接下来在圆周取作为三角形第二个点的点C
点C可能在AB的左边,也可能在AB的右边
由于左右完全对称,因此不妨设点C在AB的左边
火枪手决斗中,活下的概率
问题:
彼此痛恨的甲、乙、丙三个枪手准备决斗
甲枪法最好,十发八中;乙枪法次之,十发六中;丙枪法最差,十发四中
如果三人同时开枪,并且每人每轮只发一枪
那么枪战后,谁活下来的机会大一些?
思路:
对于枪手甲来说,威胁最大的是枪手乙,他因此枪手甲会先射击枪手乙
对于枪手甲来说,威胁最大的是枪手甲,他因此枪手乙会先射击枪手甲
对于枪手丙来说,威胁最大的是枪手甲,他因此枪手丙会先射击枪手甲
因此在第一轮中:甲射乙,乙射甲,丙射甲
甲的活率为24%(40% * 60%
)
乙的活率为20%(100% - 80%
)
丙的活率为100%(无人射丙)
而在第二轮中,又分为以下情况:
情况一:甲活乙死(24% X 80% = 19.2%
)
甲射丙,丙射甲:甲的活率为60%,丙的活率为20%
情况二:乙活甲死(20% X 76% = 15.2%
)
乙射丙,丙射乙:乙的活率为60%,丙的活率为40%
情况三:甲乙同活(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%
由此得知实际上丙的存活率是最高的
其他
连续整数之和为1000的整数有多少组
思路:
设有n个连续整数,最小的那个是a,按等差数列求和公式,这n个整数的和为n * a + n * (n-1) / 2
即求方程n * a + n * (n-1) / 2=1000
的整数解
把方程变为a = 1000 / n - (n - 1) / 2
,如果a是整数:
- 要么n是奇数且n能整除1000(这样
1000 / n
和(n - 1) / 2
都是整数) - 要么n是偶数且
1000 / n
的小数部分为0.5,把1000分解为2 * 2 * 2 * 5 * 5 * 5
找出符合条件的数共有4个:1、5、16、25
二叉树的层数问题
问题:
求解层数为n
的二叉树总共有多少种
思路:
分为满二叉树和非满二叉树,比如说二层的二叉树就有的root + lchild
、root + rchild
,root + l + r
这3种
零层的二叉树有1种
一层的二叉树有1种
二层的二叉树有2 * (a0 * a1) + a1 * a1 = 3
种
三层的二叉树有2 * (a0 * a2 + a1 * a2) + a2 * a2 = 21
种
四层的二叉树有2 * (a0 * a3 + a1 * a3 + a2 * a3) + a3 * a3 = 546
种
N
层的二叉树有2 * (a0 * an-1 + a1 * an-1 + ...) + an-1 * an-1
种
跑步问题
问题:
小李早上8点20分在一个400米长的环形跑道上跑步,先是逆时钟跑一分钟,然后掉头顺时钟跑2分钟
然后又逆时钟3分钟,以此类推,当他跑到起点的时候正好准备掉头
当小李按逆时针方向跑到出发点,又恰好该往回跑时,他的练习正好停止。如果假设小李一直保持匀速,每分钟跑120米
请问小李锻炼了多久的时间
思路:
先逆时针跑x分钟,在顺时针跑x+1分钟,则实际路程便是顺时针跑1分钟
要让小李逆时针方向跑到出发点,又恰好该往回跑,则表明此时小李的有效跑步长度要是400米的倍数
即-1 + 2 - 3 + 4 - 5 + 6....
,最后得到的结果要是10的倍数(因为120 * 10 % 400 = 0
)
则刚好到19的时候,得到的结果是-10
因此小李的锻炼时间为1 + 2 + 3 + ...+ 19 = 190
分钟
掰巧克力问题
问题:N * M
块巧克力,每次掰一块的一行或一列,掰成1 * 1
的巧克力需要多少次?
思路:
每次拿起一块巧克力,掰一下(无论横着还是竖着)都会变成两块
因为所有的巧克力共有N * M
块,所以要掰N * M - 1
次
-1是因为最开始的一块是不用算进去的
24小时里面时针分针秒针可以重合几次
思路:
24小时中时针走2圈,而分针走24圈,时针和分针重合24-2=22
次
而只要时针和分针重合,秒针一定有机会重合,所以总共重合22次
reference
https://www.nowcoder.com/discuss/974128
https://www.nowcoder.com/discuss/972078
https://www.nowcoder.com/discuss/968842
InterviewGuide
第四版阿秀