458. Poor Pigs

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
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.
有1000个水桶,其中一个只有一个含有毒药,其余的都装满了水。 它们看起来都一样。 如果猪喝了那种毒药,它会在15分钟内死亡。 你需要在一小时内找出哪个桶中含有毒药的最小猪量是多少。

2,题目思路
对于这道题,很像以前的一个国王要求奴隶尝酒并找出毒酒一样。区别在于,这道题有喝完的死亡时间以及需要在规定的时间内完成检测,因此在这道题中,猪猪就可以重复利用:
即,假如一头猪在15分钟内喝完毒药会死,但是因为一共有1个小时的时间,因此,在这一个小时中,猪一共可以尝4排或者4列,也即,一头猪可以负责4行或4列,于是可以探测出5行或者5列是否有毒。
因此,两头猪就可以负责5 * 5 = 25个桶的水,同样的,3头猪就可以负责5 * 5 * 5 = 125个桶的水(可以想象为一个立方的矩阵),依次类推。

3,程序源码

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        //因为有最小时间的存在,因此一只猪可以用多次(即重复使用,只要不死),这样可以减少猪的使用数量
        int pigs = 0;
        while(pow(minutesToTest/minutesToDie+1, pigs) < buckets)
            pigs++;
        return pigs;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值