1. 程式人生 > >Leetcode 458.可憐的小豬

Leetcode 458.可憐的小豬

設有 需要 == pow 其中 幸運 math 編寫 實驗

可憐的小豬

有1000只水桶,其中有且只有一桶裝的含有毒藥,其余裝的都是水。它們從外觀看起來都一樣。如果小豬喝了毒藥,它會在15分鐘內死去。

問題來了,如果需要你在一小時內,弄清楚哪只水桶含有毒藥,你最少需要多少只豬?

回答這個問題,並為下列的進階問題編寫一個通用算法。

進階:

假設有 n 只水桶,豬飲水中毒後會在 m 分鐘內死亡,你需要多少豬(x)就能在 p 分鐘內找出"有毒"水桶?n只水桶裏有且僅有一只有毒的桶。

可憐的小豬,被拿去做實驗了。

先看1只小豬,60分鐘的話,它最多可以判斷出 60/15+1 = 5只水桶中的毒藥桶。每隔十五分鐘喝一次水,喝四次,如果幸運的話活了下來,就是最後一桶。

再接著看2只小豬,60分鐘,它最後可以判斷出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

將桶像上面擺放,第一只豬喝掉第一位為0的混合後的水,每隔15分鐘喝一次,這樣如果不幸運,在x行被毒死了,則證明毒藥在第x行;在第一只豬豬和的同時讓第二只豬豬喝掉第二位為0的混合水,如果在y列被毒死,則毒藥在第y列。這樣第一只豬豬判斷出了橫坐標x,第二只豬豬判斷出來縱坐標y,則可以知道哪桶水有毒。

 1 class Solution {
 2     public int
poorPigs(int buckets, int minutesToDie, int minutesToTest) { 3 4 if(buckets == 1) return 0; 5 6 int w = minutesToTest / minutesToDie + 1; 7 int re = 1; 8 while(Math.pow(w,re) < buckets) 9 re ++; 10 11 return re; 12 } 13 }

Leetcode 458.可憐的小豬