正面数量 | 反面数量 | |
第1次 | a/2+b | a/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 |
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位 | 第二位 | 第三位 | 状态 |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
以此类推,第二位为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 [腾讯]
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
6 | 2 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |