LeetCode #458 - Poor Pigs

题目描述:

There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. They all look the same. If a pig drinks that poison it will die within 15 minutes. What is the minimum amount of pigs you need to figure out which bucket contains the poison within one hour.

Answer this question, and write an algorithm for the follow-up general case.

Follow-up:

If there are n buckets and a pig drinking poison will die within m minutes, how many pigs (x) you need to figure out the "poison" bucket within p minutes? There is exact one bucket with poison.

有n个桶,其中有一桶有毒药,一头猪喝了毒药之后在m分钟之后会死去,那么在给定的p分钟,我们需要分辨出那一桶水有毒,求问最少需要多少头猪?由于给定了p分钟,那么一头猪可以测试p/m=k+1轮,因为如果前k轮都没死,那么就是最后一轮有毒。那么如果有x头猪的话,在p分钟内,它们能测试多少桶水呢?这里就要采用多维度,让一头猪负责一个维度,例如有3头猪可以测试4轮,那么一共可以测试4^3=64桶水,按照这个原理就可以确定猪的数目。

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int times=minutesToTest/minutesToDie+1;
        int pigs=0;
        while(pow(times,pigs)<buckets) pigs++;
        return pigs;
    }
};

猜你喜欢

转载自blog.csdn.net/LawFile/article/details/81255355