1.你讓工人為你工作7天,回報是一根金條,這個金條平分成相連的7段,每天結束的時候,工人會向你要一段金條。如果只允許你兩次把金條弄斷,你如何給你的工人付費?
2.有1000個蘋果,將它們放在100個箱子裡,怎麼放才能讓我向你要蘋果的時候,你都能整箱整箱的給我,你的給法是否唯一?
這兩個題目我想很多人都曾做過,如果你會做第乙個題目,那你也應該會做第二個...如果不會,請看文章標題的提示...
下面就個人理解給出這種二進位制的思想:
我第一次看到的是第二個題目,一開始,沒什麼思路,只是一步步的試,比如說,如果要乙個蘋果,我就必須要有乙個箱子裡放1個蘋果,這是沒法改的,如果要兩個蘋果,我要麼是給乙個放有2個蘋果的箱子,要麼是給兩個各放有1個蘋果的箱子,顯然後面那種不行,因為當向我們要三個蘋果的時候,我們至少要用掉三個箱子...後來突然想到高中塗高考志願卡時,遇到的乙個有趣的1248碼,卡片只給出四個塗色框,第乙個表示1第二個表示2,第三個表示4,第四個表示8,如果我們的號碼中有個數字是7,我們就將1 2 4都塗上.
很好,由1,2,4,8這幾個數字,我們可以看出,它們能組成1-15中的任何乙個數字,如果我們就用這種方法,用掉4個箱子,那第五個箱子,我們就必須要放16個蘋果,這樣一來,可以組成1-31中的任何乙個數字,第六個箱子我們得放32個...依此類推,我們放的是1,2,4,8,16,32...驚訝的發現:這組數字的規律是乙個以2為比的等比遞增數列,自然而然想到二進位製化十進位制的方法,11111111b=2的7次冪+2的6次冪+2的5次冪+2的4次冪+... 如此一來,如果我們讓每個箱子各對應乙個具有10bit的二進位制的一位,1表示在第n個箱子放2的n次冪個蘋果,我們可以算出,0000000000b~1111111111b的表數範圍為:0-1023,而且可以看出,每乙個在這中間的數都可以唯一的對應乙個二進位制數,也就是說針對不同數目的蘋果,我們給箱子的時候,只有一種給法,因為只有1000個蘋果,所以最後乙個箱子我們沒有放512個蘋果,而是只放了489個,那麼1-488只有唯一的給法,489-1000有兩種給法.(更正一下:只有489-511有兩種給法...1-488和512-1000都只有唯一的給法...)
顯然,第乙個題目也是用到了這種思想,我們可以將金條分成1、2、4三段,不管哪天工人向我們要金條,我們都能給他,比如說:工人第一天沒有要金條,第二天要的時候,我們給他2段,第三天他沒有要,第四天他要我們給金條,於是我們將那塊四段的給他,收回那個2段的...
兩個面試題
1.實現乙個lite版的字串替換函式 c c char strreplace char str,const char sub,const char rep 限制條件和要求如下 1.其中str為原字串,sub為待被替換的子串。為簡單起見,假定字串sub和rep長度一樣 2.直接對原字串str進行修改並...
兩個關於進製轉換的經典面試題
一 30!的結果,轉換成3進製有幾個0 拿常見的10進製來分析 例如5!中有幾個0 10中有幾個0 5!120 乙個0 10 3628800 2個0 在10進製中,出現0的情況無非是出現2個數相乘剛好為10,進製出現了0,5!中只有2和5能湊出10來,因此乙個0 10!中有2 5 10湊出兩個10來...
兩個簡單的面試題
分享兩個簡單的面試題,好吧,求質數的那個面試題居然沒做出來。要好好打基礎 public class study0812 獲取arr陣列中最大的數的索引,該索引加97就是字元中重複最多的字元 int maxindex 0 for int i 0 i arr.length 1 i return char...