1. 程式人生 > >105、可憐的小豬

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; 
    }
}