面试题之智力题

三人三鬼过桥

题目:

有三个人跟三个鬼要过河,河上没桥,只有条小船

船一次只能渡一个人和一个鬼,或者两个鬼,或者两个人

无论在哪边岸上,只要是人比鬼少的情况下(比如:两鬼一人,三鬼两人,三鬼一人),人都会被鬼吃

然而船又一定需要人或鬼操作才能航行

问:如何安全的把三人三鬼渡过河对岸


思路

先两鬼过去,再一鬼回来。此时:对面有一鬼,这边有三人两鬼

接着两鬼过去,再一鬼回来。此时:对面有两鬼,这边有三人一鬼

然后两人过去,再一人一鬼回来。此时:对面一人一鬼,这边两人两鬼

最后两人过去,再一鬼回来。此时:对面三人,这边三鬼

剩下的三个鬼,两个过去,一个回来再接另一个即可




小猴子搬香蕉

问题:

一个小猴子边上有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 + lchildroot + rchildroot + 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第四版阿秀


 上一篇
CMU 15-445 15-Concurrency Control Theory CMU 15-445 15-Concurrency Control Theory
Motivation多个事务对于同一条数据进行修改 可能会出现竞争、更新丢失的问题 执行多条语句(事务)的时候机房发生断电,该如何处理 持久化(durability)的问题,需要恢复(recovery)解决 并发控制
2022-11-26
下一篇 
每日一题——764.最大加号标志 每日一题——764.最大加号标志
题干在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0 返回 grid 中包含 1 的最大的 轴对齐 加
2022-11-09
  目录