題目:
總共有1000個罐子,其中有且只有1個是毒葯,另外其他的都是水. 現在用一群可憐的豬去找到那個毒葯罐. 已知毒葯讓豬毒發的時間是15分鍾, 那么在60分鍾之內,最少需要幾頭豬來找出那個毒葯罐?
分析:
為什么可憐不言而喻...本題可以這么考慮問題, 先是二維地排列罐子, 然后分別讓兩頭豬去嘗試找出哪一行和哪一列有毒.間隔時間為15分鍾, 由於測試時間是60分鍾 所以總共1只豬能測試5行或者5列. (這里不是4行或者4列, 因為如果前面4個測試豬都沒死的話, 說明最后一行/最后一列肯定有毒). 總結一下,1個維度交給1只豬, 它鞠躬盡瘁死而后已, 能幫我們檢查出(測試時間/毒發時間 + 1)個維度單位.
那么回到二維的例子里面, 2只豬能幫我們檢查5*5=25個罐子,那么如果是三維, 就是5^3 = 125個, 以此類推隨着維度的上升,只要最后的水桶數大於我們需要檢查的水桶數,就需要幾頭豬.
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
代碼:(相對簡單)
public class solution{
public int poorPigs(int buckets, int timeToDie, int timeToTest) {
int pigs = 0;
while (Math.pow((timeToTest / timeToDie + 1), pigs) < buckets) {
pig++;
}
return pigs;
}
}