?1晰洒、1000瓶藥水,其中至多有1瓶劇毒,現(xiàn)在給你10只小狗在24小時(shí)內(nèi)通過(guò)小狗試藥的方式找出哪瓶藥有毒或者全部無(wú)毒(小狗服完藥20小時(shí)后才能判斷是否中毒)娜谊。
解題思路:
首先,不能考慮(24-20=4小時(shí))渔肩,在4小時(shí)內(nèi)因俐,將1000瓶藥水依次喂給10只狗,將喂藥的時(shí)間點(diǎn)與藥水記錄下來(lái)周偎。不考察這種查找方式抹剩。
標(biāo)準(zhǔn)的解題方法: 把狗從0-9編號(hào); 把藥水按1-1000編號(hào)蓉坎; 把藥水編號(hào)按二進(jìn)制澳眷,如果第i位(因?yàn)樽畲?000,所以bit位為0-9)bit位為1蛉艾,則分給編號(hào)為i的狗狗喝钳踊; 最后得一二進(jìn)制數(shù),如果編號(hào)為i的狗狗死了勿侯,該數(shù)的第i bit位為1拓瞪,該數(shù)就是有毒的藥水編號(hào)。 他說(shuō)的比較專業(yè)
下面我用實(shí)例給解析一下: 用 0助琐、1祭埂、2、3兵钮、4蛆橡、5、6掘譬、7泰演、8、9 給小狗編號(hào)葱轩; 而藥水按1-1000編號(hào)睦焕; 我們把每瓶藥水的編號(hào)轉(zhuǎn)換為二進(jìn)制數(shù),由于2的10次方=1024靴拱,所以我們將二進(jìn)制數(shù)定為有10個(gè)數(shù)位复亏,如: 1=0000000001 13=0000001101 214=0011010110 對(duì)二進(jìn)制轉(zhuǎn)換不熟悉的朋友可以用“開始-程序-附件-計(jì)算器-查看-科學(xué)型”來(lái)輕松轉(zhuǎn)換。 這樣轉(zhuǎn)換以后缭嫡,每個(gè)藥水編號(hào)的二進(jìn)制數(shù)的每一位都分別對(duì)應(yīng)一只小狗缔御; 我們定義每瓶藥水要喂給其二進(jìn)制編號(hào)位數(shù)為“1”的那位對(duì)應(yīng)的小狗喝; 由于2的10次方=1024>1000妇蛀,所以這些二進(jìn)制編號(hào)組合都是唯一的耕突; Java初高級(jí)一起學(xué)習(xí)分享笤成,共同學(xué)習(xí)才是最明智的選擇,喜歡的話可以我的學(xué)習(xí)群64弍46衣3凌9眷茁,或加資料群69似64陸0吧3(進(jìn)群備注平臺(tái)名)
當(dāng)我們用不到4小時(shí)的時(shí)間將1000瓶藥水分別喂給相應(yīng)的小狗喝后炕泳,就可以去看看書,上上網(wǎng)上祈,聽聽歌來(lái)打發(fā)剩下的20小時(shí)培遵; 20小時(shí)候,在一個(gè)合理的藥效發(fā)作時(shí)間后登刺,我們統(tǒng)計(jì)有中毒癥狀小狗的編號(hào)籽腕,中毒的定為“1”,正常的定為“0”纸俭; 然后依照編號(hào)順序排列皇耗,我們就可以得到一個(gè)10位的二進(jìn)制數(shù),而將這個(gè)二進(jìn)制數(shù)再轉(zhuǎn)換為十進(jìn)制數(shù)后揍很,這個(gè)數(shù)值就是有毒的藥水的編號(hào)了郎楼; 例如,最終結(jié)果是編號(hào)為 2窒悔、4呜袁、6、7简珠、9 的小狗有中毒癥狀阶界,我們就將一個(gè)十位二進(jìn)制數(shù)的2、4北救、6荐操、7芜抒、9位設(shè)為“1”珍策,其余各位設(shè)為“0”,即:0010101101宅倒; 而0010101101對(duì)應(yīng)的十進(jìn)制數(shù)=173攘宙,所以第173瓶藥水就是有毒藥水!
看到這個(gè)答案拐迁,我徹底被嚇到了蹭劈。。高手太多了线召。沒(méi)法活了