105、可怜的小猪

有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。

问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?

回答这个问题,并为下列的进阶问题编写一个通用算法。

进阶:

假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有毒的桶。

我滴天哪,这道题我前前后后想了半天,后来才知道,你可以把水混在一起,比如:时间按照给的那个标准来,十五分钟后看到效果,60分钟以内,那么一头猪很明显能区别5桶水,那么如果是25桶呢?你会想,一头猪5桶那么25桶不可能是两桶水的啊,那么我可以这么来,就是把25桶水分成一个5*5的数组,那么就是五行五列,这五行中我们让猪首先尝试的是其中五桶水的混合,那么肯定有头猪死了,我就可以确定肯定在这一行了,接下来让没死的继续尝试这一行的五桶水,就好了,关键在于让猪首先尝试混合的直到死,能够判断在哪一行,这样就很简单了,依次类推根据提示,这里就可以拓展成进制问题了

class Solution {
    public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
       if(buckets == 1 || buckets == 0){
			return 0;
		}
		int j = 1 + minutesToTest / minutesToDie;
	//	System.out.println("j"+ j);
		int count = 0;
		while (buckets > Math.pow(j, count)) {
			count++;
		}
		
		
		
        return count; 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值