Leetcode458-可怜的小猪

题目描述

有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在 15 分钟内死去。问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?

思路

先考虑有一头猪的情况:60分钟的话,它最多可以判断出 60/15+1 = 5只水桶中的毒药桶。每隔十五分钟喝一次水,喝四次,如果幸运的话活了下来,就是最后一桶。注:题目中说喝了毒药之后15分钟之内死,没确定的说哪一分钟死可能14、13、12……分钟就死了。
在考虑二头主的情况,假如有25个罐子
我们将罐子排列如下:
1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25
分两只猪。
第一只去寻找列坐标,第二只去寻找行坐标。
以第一只为例,先在0分钟喝下1,6,11,16,21桶水, 再在15分钟喝下 2 7 12 17 22桶水。 再在第30分钟喝下3 8 13 18 23桶水 再在 45分钟喝下 4 9 14 19 24 29桶水 这时候如果没有死, 那么毒水在第5列。如果在其中某一时间段死了,那么也可以确定相应的列。而第二只猪0分钟喝下1 2 3 4 5,15分钟喝下 6 7 8 9 10……以此类推……可以确定相应的行。3只猪就可以确定三维,4只猪就可以确定4维。
故 只需要(n^res) >= buckets(n即为测试时间除以中毒检验时间再加一)。

代码

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
     int pigs = 0;
        while(pow((minutesToTest/minutesToDie)+1,pigs)< buckets)//minutesToTest表示死亡时间,minutesToDie表示所给的总时间,(minutesToTest/minutesToDie)+1表示一头猪可以测试的水桶的数目。
            pigs++;
        return pigs;   
    }
};

你可能感兴趣的:(Leetcode)