有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。
问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?
回答这个问题,并为下列的进阶问题编写一个通用算法。
进阶:
假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有毒的桶。
参考:http://www.voidcn.com/article/p-vrqdyaov-bpd.html
分析:拿到题目乍一看 ~~不知
所云,我擦,不是easy类的题吗,怀疑了一波自己的智商然后去Google了。
一头猪有五个状态,15min,30,45,60,die or alive.
一头猪不光是死活两种状态,而是具有五种状态,所以应该采用五进制进行编码;
用这种编码方式去唯一对应一个水桶,当五个回合结束之后通过两头猪在五个状态的状态判断哪一个桶水有毒。
所以n个猪能确定的编码数量是5的n次方
class Solution {
public:
int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
return ceil(log(buckets) / log(minutesToTest / minutesToDie + 1));
}
};