題目:
分析:
看完題,就想起來算法课上的一道题。
利用二进制位来解决问题。
时间有什么用,我们假设32瓶,时间允许两次,那么按4只小猪来,第一次16瓶,如果有毒,那么判断出来了,如果没死,继续用。
所以多一次实验可以少一位,即少一只小猪。
错误。
可实验次数+1
作为log的底。
以2次实验为例,2+1=3
第一次喝3进制中的1位置,有死的,直接得出,没有的话,第二次喝三进制中的2位置。
确实挺奇妙的,我只能说记住吧!
代碼:
class Solution {
public:
int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
if(buckets==1) return 0;
int c=minutesToTest/minutesToDie+1;
return (int)(log(buckets-1)/log(c))+1;
}
};