一些校招笔试题

1 有一堆硬币,初始状态未知。现在假设有一个机器人,不停的做如下处理:对每一个硬币,如果是反面,就把它翻为正面,如果正面就把它随机抛一下。问:经过无数遍这样的处理后,这一堆硬币的状态    能稳定下来吗?如果能,正面的硬币和反面的硬币最终比例是多少? [美团:2013]

假设初始状态为:正面a枚,反面b枚。
 正面数量反面数量
第1次a/2+ba/2
第2次(a/2+b)/2 + a/2(a/2+b)/2
第3次((a/2+b)/2 + a/2)/2+(a/2+b)/2((a/2+b)/2 + a/2)/2
   

可以看到每次处理后,正面的硬币的数量变为原来正面数量的1/2+原来反面硬币的数量,而反面的硬币的数量变为原来正面硬币数量的1/2.
即:

an = an-1/2 + bn-1,bn = an-1/2(ai: 第n遍处理后正面硬币的数量,bi:第i遍处理后反面硬币的数量)

这样的变化会不会稳定下来呢?由上面的表述可知,如果bn-1 =an-1/2,那么再经过一遍处理后,an= an-1/2 + bn-1 = an-1
bn= an-1/2 = bn-1。所以当正面硬币是反面硬币的2倍时,状态就会稳定下来。
我们来看看,这个状态是不是必然会达到的。
假设初始状态为:正面硬币/反面硬币>2,经过一遍处理后,显然反面硬币的数量增多了,如果这个比例还是大于2,再进行一遍处理后,反面的硬币数量会继续增多,这个变化会一直持续到比例为2.以此类推,这个比例小于2,经过一遍处理后,反面硬币的数量就会减少,知道这个比例等于2.
最终的结论就是:状态会稳定,正面硬币和反面硬币的最终比例为2:1


2 需要多少只小白鼠才能在24小时内找到毒药? [腾讯]

有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒?

考虑另一个问题,假设有x只小白鼠,那么24小时内最多能从多少瓶水中找出有毒的那瓶?

小白鼠最后的状态不是死就是活(设0表示死, 1表示活),x只小白鼠能够表示2^x种状态,如果一种状态能够对应于一个瓶子,那么就能在24

小时内就能从2^x只瓶子中找出有毒的那一瓶。如何对应呢?

这里把瓶子编号为0, 1, ..., n-1. 以x等于3为例:

瓶子编号为0, 1, ... 7, 可以用3位二进制表示。

第1位第二位第三位状态
0000
0011
0102
0113
1004
1015
1106
1117
设第一只小老鼠对应于第1位,如果小白鼠最后死掉,即对应位为0,也就是小白鼠喝了有毒的水,第一位为0的值有,0, 1, 2, 3. 

以此类推,第二位为0对应的值有,0, 1, 4, 5, 第三位为0对应的值为, 0,2 ,4, 6.

分别让小白鼠1喝编号为0, 1, 2, 3的水, 小白鼠2喝编号为0, 1, 4, 5的水, 小白鼠3喝编号为0, 2, 4, 6的水。就能在24小时从8瓶水中找出有毒的哪一瓶。

总结:要从n瓶水找出有毒的哪一瓶,至少需要x = log2n只小白鼠。具体怎么做呢?取x位二进制,每一位对应于一只小白鼠,没只小白鼠喝的水的编号,

是该位为0 的那些值。


3  根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9 [腾讯]

0123456789
6210001000





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值