一个分治法的题目,软设。
现有16枚外形相同的硬币,其中有一枚比真币的重量轻的假币,若采用分治法找出这枚假币,至少比较(63)次才能够找出该假币。
(63)A. 3 B. 4 C. 5 D. 6
= = 我感觉一次就可以了啊 第一个是假的 第一个与第二个比较大小 然后直接return
[解决办法]
Just need to times to pick out the special one.
/* a[000] b[000] c[0] d[0] */
if (a == b) {if (c < d) return c; else return d;}
else {
if(a < b) check a; // pick the lighter one from 3 balls.
else check b;
}
[解决办法]
3^2 < 16 < 3^3
因此只要3次就够了
每次分成3堆
第一次
5(左),5(右),6
至少可以排除10个。(平衡时说明轻的在6个那堆上,否则在较轻一堆上。
第二次
2,2,1(或者2)
同理,至少排除3个,
最后剩下
1个(或2个)
之多再称一次就够了。