有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。
问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?
回答这个问题,并为下列的进阶问题编写一个通用算法。
进阶:
假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有毒的桶。
我滴天哪,这道题我前前后后想了半天,后来才知道,你可以把水混在一起,比如:时间按照给的那个标准来,十五分钟后看到效果,60分钟以内,那么一头猪很明显能区别5桶水,那么如果是25桶呢?你会想,一头猪5桶那么25桶不可能是两桶水的啊,那么我可以这么来,就是把25桶水分成一个5*5的数组,那么就是五行五列,这五行中我们让猪首先尝试的是其中五桶水的混合,那么肯定有头猪死了,我就可以确定肯定在这一行了,接下来让没死的继续尝试这一行的五桶水,就好了,关键在于让猪首先尝试混合的直到死,能够判断在哪一行,这样就很简单了,依次类推根据提示,这里就可以拓展成进制问题了
class Solution {
public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
if(buckets == 1 || buckets == 0){
return 0;
}
int j = 1 + minutesToTest / minutesToDie;
// System.out.println("j"+ j);
int count = 0;
while (buckets > Math.pow(j, count)) {
count++;
}
return count;
}
}