今日面试,遇到了一道比较有意思的面试题,由于本人才疏学浅,所以当时并没有答上来。回来翻阅资料后才能白其中的原理。有一种,卧槽,这么简单 的感觉,特此分享留念!
题目:有12课小球,其中有一颗重量不一样,给你一个天平,要你称3次找出哪颗小球不一样,是重了还是轻了!
最开始我想到的是二分法查找 即 12课球 分成 1 2 3 4 5 6 7 8 9 10 11 12 各6个 去天枰对比 ,后来发现 称3次不够。
回来查阅资料后,恍然大悟。不能二分 要3分 即 1234 ,5678 , 9 10 11 12
示例1:我们先假设 8 是坏小球 轻于其他小球
第一次称:先取出 1234 和 5678称
发现 天枰是斜的,1234重 5678轻了。可以判断 坏小球必定在这8个数当中
第二次称:把 右边的567放到左边来,同时在右边增加9 10 11,去掉左边的234.
左边这时为 1567 右边 这时为8 9 10 11
发现 天枰还是斜的 1567重 8 9 10 11轻。可以得出 1和8可能是坏小球 1重或者8轻
第三次称:左边放1 右边放 9
结果为平衡。可以断定 8是坏小球,且重量轻了!
示例2:假设5是坏小球 重于其他小球
第一次称:先取出 1234 和 5678称
发现 天枰是斜的,1234轻 5678重了。可以判断 坏小球必定在这8个数当中
第二次称:把 右边的567放到左边来,同时增加9 10 11,去掉左边的234.
左边这时为 1 5 6 7 右边 这时为8 9 10 11
发现 天枰还是斜的 1 5 6 7重 8 9 10 11轻。可以得出 567重有坏小球,且重于其他小球
第三次称:左边 5 右边6
发现 左边重,右边轻,第二次已经知道了小球是重还是轻了,那么这里可以直接得出 左边的5是坏小球。
思考:既然分3组可以实现3次称得出坏小球和重了还是轻了,那么我分四组是否也可以呢?下面开始实践
分组 1 2 3 ,4 5 6, 7 8 9, 10 11 12
示例1:假设坏球是 5 且重量轻了
第一次:123 和456
结果 123重,456轻 表示坏球在 这六个数之间, 剩余未上称的都是好球
第二次:145和678
结果:145轻 678重 表示 45中有坏小球且重于其他小球
第三次 4和6
结果:平了 那5就是坏小球
我去!!!貌似可以啊!再试几个
示例2:假设坏球是10且重量轻了
第一次:123 和456
结果 平了,说明 789和10 11 12中才有坏小球
第二次:左边 123和右边789
结果 平了。。。。emmmmmmm 好像3次实现不了啊!!!在纸上演进了无数次,没有找到3次就可以找出小球的方法!放弃!!!
本着求虐求教育的心态,如果各位看官大佬有其他的更简单的实现方法,欢迎指教!小弟感激不尽!!!