[Alg::Trick]小白鼠找毒酒

时间:2022-11-07 06:50:49

题目来源:牛客网
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 是毒酒,最终没有任何人死亡,皆大欢喜。

参考:

  1. http://blog.csdn.net/chivalrousli/article/details/20613155