乙個面試問題的思考

2022-06-20 01:39:11 字數 1232 閱讀 8416

有1000瓶超級名貴的葡萄酒,其中有1瓶有毒。這種毒藥很厲害,哪怕被稀釋了1000000倍還是可以毒死人的。但這個毒藥一定時間後才會毒發,時長是1個月。為了不浪費這些葡萄酒,有100個壯士決定花5周的時間將毒酒找出,他們只希望最多有10個人犧牲,你需要如何安排才能實現。 -- toplanguage

1000瓶酒,人均10瓶那麼可以這樣把酒分組。

第一次:1-10,11-20,21-30...991-1000

第二次:2-11,12-21,22-31...992-1(就是1001迴圈到1)

第三次:3-12,13-22,23-32...993-2(就是1002迴圈到2)

...第九次:9-18,19-28,29-38...999-8

第十次:10-19,20-29,30-39...1000-9

這樣每次分組都有100組,對應每個壯士。十次分組,那麼每瓶酒都有十個人喝,所以我們觀察哪十個壯士毒發,那麼就可以他們共同喝了那一瓶酒就是毒酒。

這個解法一定會有十個壯士毒發,代價大,但是滿足要求。

但是這裡沒有用到時間。題目中35天時間沒有用上

同樣也是分組,同樣也是每人認領10瓶,但不一樣的是不是一天喝完。

第一天:1-2,11-12,21-22... 意思第乙個人喝1-2,第二個人喝11-12,以此類推

第二天:3-4,13-14,23-24...

第三天:5-6,15-16,25-26...

第四天:7-8,17-18,27-28...

第五天:9-10,19-20,29-30...

那麼根據壯士毒發的時間就能知道毒酒到底在哪,然後根據最後一天毒發的人確定到底是偶數有毒還是奇數有毒。注意加粗部分,第五天採用了兩個操作。

第一種情況:

這裡假設毒酒在前4天被喝到,那麼在30-34天就知道哪兩瓶酒有毒,在第35天看上乙個區間的人是否毒發就能知道毒酒是在偶數瓶還是奇數瓶。

第二種情況:

這裡假設毒酒在第5天被喝到,那麼在35天才會有人毒發。這裡假設第乙個壯士 a 毒發了。這個壯士喝了自己的9,10 瓶酒,也喝了下乙個人的偶數(奇數)瓶。

a. 如果下乙個人也毒發那麼毒酒就在下乙個壯士的第偶數(奇數)瓶

b. 如果下乙個人沒有毒發那麼毒酒就在 a 的第9瓶或者第10瓶裡。這時觀察 a 前面的壯士是否毒發就能確定,毒酒是第9瓶還是第10瓶。

這個解法利用了30-35天的時間差最多有兩個壯士毒發,最少毒發乙個,犧牲會小很多。

面試問的乙個併發問題

客戶端如果同時請求多次,怎麼處理?前端可以做防重複 後端 在方法裡面用鎖鎖住 塊,查詢redis快取中有沒有資料,沒有資料就將唯一值放入快取中,釋放鎖,繼續其他操作 如果有資料,就直接返回提示,正在操作中。static 塊什麼時候執行的?初始化階段 clinit 方法是由編譯器自動收集類中的所有類變...

乙個總經理的11個經典面試問題

孫子曰 兵者,國之大事,死生之地,存亡之道,不可不察也。當代社會,應聘乙個崗位,猶如與敵國打仗。準備打仗的時間與打仗時間之比應為10 1,甚至是100 1。故,我們不得不深究也。最近,自己面試了上百個大學生,覺得他們在面試的心態和技能方面急需提高,以便順利通過這一關,進入人生的第乙個職業。面試過程中...

乙個總經理的11個經典面試問題

乙個總經理的11個經典面試問題 孫子曰 兵者,國之大事,死生之地,存亡之道,不可不察也。當代社會,應聘乙個崗位,猶如與敵國打仗。準備打仗的時間與打仗時間之比應為10 1,甚至是100 1。故,我們不得不深究也。最近,自己面試了上百個大學生,覺得他們在面試的心態和技能方面急需提高,以便順利通過這一關,...