前兩天面試的時候,被問到了兩個很有意思的題目:
一共有100瓶藥水,只有一瓶是毒藥,已知如果小白鼠喝了這瓶有毒的藥水(三天發作),即會在三天時死亡,請問如何在3天的時間裡分辨出哪瓶是毒藥,並且使用的小白鼠數量最少。
答案:7只
這個題題目其實很有意思,我當時一開始沒搞懂題目意思,就想著3天後才會發作死亡,那怎麼都不可能在三天之內找出這瓶毒藥的啊。其實我是自己走到了乙個死胡同,按照題目意思,是只要在剛好3天的這個時間裡找出來就好,所以以後還是要首先搞懂題目意思再進一步思考。
好了,現在言歸正傳。
面試官給出了一種思路:利用乙個10*10的陣列,將100瓶藥水放在這個陣列的每個位置裡,每行和每列的開頭分別有乙隻小球,一共20只,給他們分別編號(r1~r10和c1~c10),會有兩隻老鼠喝了那瓶毒水,在3天時間到的時候,看是哪兩隻白鼠發作,根據發作的這兩隻白鼠的編號即可判斷出哪瓶是毒水。
但是面試官說這不是最優的,要使小白鼠的數量盡可能最少,可以使用下面這個二進位制的思想:
把100個瓶子按2進製編號,因為只有100個,2的8次方就夠表示了,7只老鼠,按編號來,1號瓶子000 0001,給編號為1的老鼠吃,2為000 0010,給編號為2的老鼠吃,3為000 0011,給編號為1和2的老鼠吃,以此類推。最後根據3天時間時發作死亡的老鼠編號來判斷瓶子編號為多少的是毒藥。比如說編號為2,3,5的老鼠發作了,那說明毒水的編號為001 0110,即第22號瓶子有毒。
有8個小球,顏色和外觀一模一樣,其中乙個小球q的重量與其他的不同,它的重量比其他小球重,只有天平可以稱量的出,問至少需要稱多少次?
答案:2次
具體過程:將8個球分為三堆,每堆球的個數分別為3,3,2,先用天平稱3和3,此時有兩種情況,
(1)當天平兩端重量不同時,說明q就在重的那端3個球中,再將這3個球分為3堆每堆1個,取出其中兩個放在天平上稱,當這天平兩端相等時,說明q是沒稱的那乙個,否則,q是天平上重的那個小球。
(2)當天平兩端重量相同時,說明q在球數為2 的那一堆,將那兩個球放在天平兩端,重的那個球就是q。
當q球重量比其他小球輕的時候,此方法仍然可行,所以最少兩次就可以稱出來。
數列找不同
題目描述 現有數列a 1,a 2,cdots,a na 1 a 2 a n q 個詢問 l i,r i l i r i a a cdots,a a li a li 1 a ri 是否互不相同 輸入格式 第1 行,2 個整數n,qn,q 第2 行,n 個整數a a cdots,a a li a li ...
十七 找不同
1 題目鏈結 給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。示例 輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。2 分析 題目要求找到t中s新增的那個字母,我首先想到將s,t排序然...
數列找不同
現有數列a 1,a 2,cdots,a na1 a2 an q 個詢問 l i,r i li ri a a cdots,a ali ali 1 ari 是否互不相同 第1 行,2 個整數n,qn,q 第2 行,n 個整數a a cdots,a ali ali 1 ari q 行,每行2 個整數l i...