题目来源:牛客网
https://www.nowcoder.com/questionTerminal/c26c4e43c77440ee9497b20118871bf1
8瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要()人测试?
首先,谴责一下,这道题目三观不正。
这个题目最重要的部分是只有一次机会,这一次机会就要找到毒酒。
那么思考一下,如果找到 n 个人试酒,8个小时之后,这 n 个人的状态有两种活着、死了。那么 n 个人总共就有 2^n 种情况,这 2^n 种情况对应着不同的毒酒编号。
直觉上是要找到最小的 n 使得 2^n >= 8。至少这样算出来的 n 是理论上的最小值,至于是否能够达到,需要另外思考。
那么具体怎么做呢?
8瓶酒按照二进制编号:
000
001
010
011
100
101
110
111
找来三个人 A、B、C。
对酒的编号约定从右侧开始计算,第 0 位、第 1 位、第 2 位。
对一瓶酒的编号。如果在 0 位上为 1,则 A 需要试这一瓶酒。如果在 1 位上为 1,则 B 需要试这一瓶酒。如果在 2 位上为 1,则 C 需要试这一瓶酒。
例如 101 号酒,需要 C 和 A 试。
只有 000 号酒没有被任何人品尝,如果 000 是毒酒,最终没有任何人死亡,皆大欢喜。
参考: