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;   
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值