面试常见的机智题

2个人拿一百个东西,一个人一次能拿1-5个,有没有必胜的方法

1
2
3
4
5
这种题目是考虑倍数的问题。每次最多取 5 个最少 1 个,这样的话就考虑每次取 6,

100÷6=16余4。

先拿的人拿 4 个,不论第二个人拿几个,第一个人把他凑成 6 个,这样永远是第一个人取到最后一个

A,B从一堆玻璃球(共100个)里向外拿球,规则如下: (1)A先拿,然后一人一次交替着拿; (2)每次只能拿1个或2个或4个; (3)谁拿最后一个球,谁就是最后的失败者;问A,B谁将是失败者?

1
2
3
4
5
6
7
8
A是失败者,证明过程如下。
1)经验算,当谁面临着4个球的时候,谁要拿球就是失败者原因:全拿,输了;拿一个,对方拿两个,输了;拿两个,对方拿一个,输了。
2)其余的96(16*6)个球,正好是6的倍数,假设A,在剩下4个球之前,从来没一次拿过1个球。(拿得是2、4),则B可以每次拿4或2,组成和为6的循环,直至剩下4个球给A.
3)假设在上述96(16*6)个球中,A有过一次拿1个球,我们假设前15轮都是每轮6个球(15*6),目前的情况是,完成15轮之后,剩下10个球;
3.1)此时A拿了1个球,B面临9个球。如可以选择1,2,4,但是B会选择拿2个球,(因为拿一个,剩下8个给对方,对方拿4个,自己就输了详见1条;拿4个,剩下5个给对方,对方拿一个,自己也输了)。
3.2)此时A面临7个球,因为是假设A只有一次拿球,所以,A要拿2或4,结果是留给对方5或3,对方拿走4或2之后,自己肯定就输了。
4)假设2中,A有过两次拿1个球,则B可以选择拿两次2个球,有凑成了6,只不过是多了一步,但是不打破16*6的规律。总结就是如果拿偶数次,则不会破坏16*6的趋势,如果拿奇数次,则奇数-1,归到15*6中去
最后一次同3.

有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?

1
第一根香先点一端,第二根香在第一根香点燃时候同时把两端点燃,这样第二根香烧完是半小时,此时第一根香也剩半小时,在第二根香烧完的同时把第一根香的另外一端也点燃,那么从第二根香烧完到第一根香烧完的这段时间就是15分钟。

抛硬币,正面继续抛,反面不抛。问抛的次数的期望延伸到连续抛 n 次

假设已经连续抛出 n-1 次正面,需要 Tn−1 次。想得到 n 次正面,则再进行一次投掷,若硬币为正面则游戏结束,还需要抛 0 次(Tn=Tn−1+1+0.5∗0+?Tn=Tn−1+1+0.5∗0+?);如果硬币为反面,则游戏重来,还需要投掷0.5∗Tn0.5∗Tn次,递推公式如下所示:
Tn=Tn−1+1+0.5∗0+0.5∗Tn

求出通项公式为: Tn=2^(n+1)−2

在n很大时,我们可以用下面的公式来近似估计: Tn≈1/ (p^(n+1))

网页/应用访问慢突然变慢,如何定位问题

答案1 答案2

有一个日志,里面记录了客户的登入登出时间(以秒为单位),求在线人数最多的时间段以及人数。

创建一个数组 change[ 243600 ] 用来记录一天中,每秒用户的变化情况,在第 i 秒上线一人change[ i ]++,在第i秒下线一人 change[ i ] - -,change[ i ] 若为正,说明这一秒上线人数大于下线人数,反之亦然。再创建一个online[ 24\3600 ],用来记录每秒在线人数,online[ 0 ] = 0表示第 0 秒在线人数为 0,计算方法为 online[ n ] = online[ n-1 ] + change[ n ]

1~100,每轮依次划掉奇数位置上的数,最后会剩下哪个数?

64。可以这样考虑,第一次去掉奇数后,剩下2、4、6……96、98、100,所有的数字都是2=2^1的整数倍;第二次去掉奇数项后,剩余的数为4、8 、12、 16……92、96、100,均是4=2^2的整数倍;继续推断第三次去掉奇数项后,剩余的数应为8=2^3的整数倍的偶数,即是8、16、24、32、40、48、56、64、72、80、88、96;第四次去掉奇数项后,剩余的数为16=2^4的整数倍的偶数,即是16、32、48、64、80、96;第五次去掉奇数项后,剩余数为32=2^5的整数倍的偶数,即是32、64、96;最后一次去掉奇数项,则剩余64.