最近去面試筆試遇到一道演算法題,題目是放在最後面的加分題,大概內容如下:
現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量(1-1000)的蘋果,都能一次給出?當時我基本沒思路,也沒多少時間,直接跳過了;
後來查了一下,用到二進位制的思想;
1000個蘋果,最接近1024,轉化為2進製,需要占用10個bit,則從右往左數,第乙個bit位表示1個蘋果,第二個
bit位表示2個蘋果,第三個bit位表示4個蘋果,,,第10個bit位表示剩下的489個蘋果。分別把這些通過放入
相同編號的箱子裡。當需要某一數量的蘋果時,檢視這些數量的哪些bit位為1,為1則表示這個bit位代表有蘋果,
取出對應編號的箱子即可。
框編號1098
7654
321蘋果數目
489256
12864
321684
21還有其他博友那淘來的毒藥問題,異曲同工:
有8瓶液體,其中一瓶是毒藥,毒性可使小白鼠飲用後在20小時內陣亡,需要幾隻小白鼠才能在20小時內判斷哪一瓶是毒藥?給8瓶毒藥編碼:
第一瓶:000
第二瓶:001
第三瓶:010
第四瓶:011
第五瓶:100
第六平:101
第七平:110
第八平:111
只需3只小老鼠
第一只老鼠喝最後bit位為1的,即第2,4,6,8瓶
第二隻老鼠喝中間bit位為1的,即第3,4,7,8瓶
第三隻老鼠喝第一bit位為1的,即第5,6,7,8瓶
如果20小時後,沒有老鼠死亡,則第一瓶有毒,否則:
假設第二隻和第三隻老鼠死亡,把對應位上bit設為1,即110,所以第7瓶有毒。
參考:
1000個蘋果分10個裝箱
1000個蘋果放入10個箱子。客戶如果要獲得1 1000個蘋果中的任意個數,都可以整箱搬,而不用拆開箱子。問是否有這樣的裝箱方法?二進位制數組合 110 1001000 可以表示任何0x01 0xff之間的數字,所以按照這樣的思想,110 1001000 10000 100000 1000000 1...
遞迴演算法《M個蘋果放入N個盤子》
題目 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。樣例輸入 7 3樣例輸出 放蘋果分為兩種情況,一種是有盤子為空,一種是每個盤子上都有蘋果。令 m,n ...
乙個演算法題
題目描述 某省會城市街道縱橫交錯,為了監控路燈的執行狀況,每條街道使用乙個數字字串標識該街道上所有路燈的執行狀況。假設路燈只有如下 3種狀態 分別用數字 0,1,2標識,一盞路燈只對應其中一種狀態 0 標識路燈熄滅 1 標識路燈開啟 2 標識路燈故障 請根據輸入的字串,找出該街道上連續的處於相同狀態...