题目描述取自LeetCode:
本题乍一看感觉比较有难度,但是仔细一想其实很简单。不要去想用多少猪能完成任务,而要用逆向思维来想多少只猪能完成多少任务。
首先以两只猪为例,在规定回合数(minutesToTest/minutesToDie
+1)的条件下,假如规定回合数为2,就可以根据回合数建立一个矩阵,既然有两只猪那么就可以让一只猪负责行,一只猪负责列,这就形成了一个2×2的矩阵,可以完成4个桶的检验。同理如果回合数变为3,则可以完成3×3矩阵的检验。如果仅把猪的数量+1,则可以完成2×2×2矩阵的检验。至此我们得到了本题中最重要的公式关系,可以完成题目要求任务。
完整代码如下:
int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
int maxNum=minutesToTest/minutesToDie+1;
if(buckets==1)return 0;//如果桶数量只有一个,则必为有毒的桶
for(int i=1;i<=10;i++){
if(pow(maxNum,i)>=buckets)return i;
}
return 0;
}