lintcode 1228. 可怜的猪 思考题

有1000个桶,有且仅有一个桶里面装了毒药,其他的都装了水。这些桶从外面看上去完全相同。如果一只猪喝了毒药,它将在15分钟内死去。在一个小时内,至少需要多少只猪才能判断出哪一个桶里装的是毒药呢?

思考回答这个问题,随后请设计实现一个算法去处理更一般的情况。

样例1:

输入: buckets = 1000; minutesToDie = 15; minutesToTest = 60
输出: 5
挑战
假如一共有 n 个桶,只有一个桶装了毒药。一只猪将在喝完毒药 m 分钟后死去。你需要多少只猪才能在 p 分钟内找出那个装毒药的桶呢?

思路:
假设5桶酒,时间为题目所设,只要一头猪就可以完成测试,第一轮第一桶酒,第二轮第二桶…若猪幸存,则第五桶酒为毒酒,故minutestotest/minutesrodie+1为可以测试的次数,因最后一次无需测试。

假设有25桶酒
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
需要两头猪,
第一轮:一头猪第一行,另一头第一列,如果都毒死,则是在交叉点,否则剩下四桶酒可能是毒酒,剩余时间刚好测试四轮,一头猪可以测完。
第二轮:一头猪第二行,另一头第二列,同样道理,如果一头猪死亡,则剩下三桶酒未测试,而测试时间也为3次。后面以此类推。

所以需要猪数为测试的时间数的n次方不小于酒桶数,此时的n即为所需要的猪的数量。

class Solution {
public:
    /**
     * @param buckets: an integer
     * @param minutesToDie: an integer
     * @param minutesToTest: an integer
     * @return: how many pigs you need to figure out the "poison" bucket within p minutes 
     */
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        // Write your code here
        int num=minutesToTest/minutesToDie+1;
        if(buckets==1) return 0;
        int pig=1;
        while(pow(num,pig)<buckets)pig++;
        return pig;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值