二進位制和三進製的妙用

2021-08-15 22:41:21 字數 4794 閱讀 3750

在it公司的筆試和面試中,總會出現那某些與進製有關的題目,現將一些常出現的進製用法**如下:

先來思考幾個問題,並不難,各位大牛應能秒殺:

1. 小明是個賣蘋果的,小紅一次在小明那買n(n<1024)個蘋果。小明每次都要數n個蘋果給小紅,唉,太麻煩了。於是小明想出了一種方法:他把蘋果分在10個袋子中,則無論小紅來買多少個蘋果,則他都可以整袋整袋的拿給小紅。問怎樣分配蘋果到各個袋子?

2. 有16種溶液,其中有且只有一種是有毒的,這種有毒的溶液與另一種試劑a混合會變色,而其他無毒溶液與a混合不會變色。已知一次實驗需要1小時,由於一次混合反應需要使用1個試管,問最少使用多少個試管可以在1小時內識別出有毒溶液?

3. 27個小球。其中乙個比其他小球都要重一點。給你乙個天平,最多稱3次,找出這個特殊的小球。

5. 小莫有乙個40磅的砝碼,一次失手掉到地上,結果摔成了4塊,心痛啊。但他卻意外的發現這4塊砝碼碎片可以在天平上稱1~40間的任意整數重量了,問4塊的重量各是多少?

6. 將區間 [0,1] 平均分為3段,挖去中間的一段,即去掉 ( 1/3 , 2/3 ) ,然後將剩下的兩段同樣各自挖去中間1/3 。這樣無限挖下去,問區間中[ 0 , 1 ] 中是否有永遠不被挖掉的點?如果有,這些點的座標有什麼規律?

答案在下面,請先思考然後看答案!

解答:問題1:

答案:按1,2,4,8,16,.......,512

分析:第乙個問題用二進位制編碼思想可以輕鬆解決,相信學計算機的各位不會有什麼困難。

按照二進位制編碼的特點, n位二進位制數的各個數字的權重從低到高分別是2^0  ,2^1 , 2^2 ,…… 2^( n – 1 ) 。  n位無符號二進位制數可以表示0到(2^n)- 1 ,共n個數。

而二進位制數字只有1和0兩種狀態,正好對應題目中蘋果袋子的「給」與「不給」兩種狀態。因此只要將各個袋子分別裝入 2^0 , 2^1 , 2^2 , …… , 2^9 個蘋果即可滿足題目要求。例如:需要66個蘋果, 因66的二進位制是 1000010 ,則小明只要將蘋果個數為2^1(2個) 和2^6(64個)的袋子給小紅就可以了。

問題2:

答案與分析:

如果沒有1小時的時間限制,那麼利用二分搜尋的思想既可以解決問題。( 第一次取16種溶液中的8種放入乙個試管,然後加入試劑a,看有沒有反應,根據結果再進行細分 。 這樣只需4個試管,但是需要4個小時 )有了這個1小時的時間限制後這種方法就不管用了。一種正確的解答如下:

首先,將16種溶液編號為0到15 ,編號的二進位制形式表示如下:

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

然後,取4個試管,第乙個試管加入編號二進位制形式中第一位(指最低位)是1的溶液,第二個試管加入編號第二位是1的溶液,其他2個試管分別加入編號第3,4位為1 的溶液。然後再將試劑a加入4個試管中,看那些試管發生了反應,就可以知道有毒溶液的編號了。例如:第1、2、4號試管內發生了反應,則我們知道是第7號溶液是有毒的。原因是7的二進位制編碼是1011,因此7號溶液是唯一加入了1、2、4號試管,而沒有加入3號試管的溶液。

問題3:

答案與分析:

第3個問題可以使用三進製的原理來解決。先說說三進製,與二進位制類似,三進製各個數字的權重分別為3^0 ,3^1 , 3^2 ,……., 3^n 。三進製用0 , 1 , 2 這3個數碼表示數 ,因此每個三進製數字有3種狀態。

對於每一次天平稱量的結果有3種:左邊較重、右邊較重、平衡。我們可以將左邊較重編號為1,右邊較重編號為2,平衡編號為0 。

首先將27個小球按照0到26編號,編號的三進製的形式如下:

000001

002010

011012

020021

022100

101102

110111

112120

121122

200201

202210

211212

220221

222第一稱量將編號的三進製第1位為1的小球(9個)放在左邊,編號第1位為2的小球(9個)放在右邊,編號第1位為0的不放。

第二次稱量將編號的三進製第2位為1的小球(9個)放在左邊,編號第2位為2的小球(9個)放在右邊,編號第2位為0的不放。

第三次稱量將編號的三進製第3位為1的小球(9個)放在左邊,編號第3位為2的小球(9個)放在右邊,編號第3位為0的不放。

好了,根據3次稱量的結果,我們就可以知道較重的那個小球的編號了。假設3次稱量結果的編號分別為0,1,2 ,那麼我們可以知道較重的是21號小球。因為21的三進製是( 210 ) ,因此只有21號小球在第一次稱量時沒放,第二次放在左邊,第三次放在右邊。

問題4:

答案與分析:

問題4算是問題3的公升級版本吧。

如果知道異樣小球比其他小球輕或重,那麼就好辦了,只要將12個小球分為4,4,4三堆,稱3次是可以找到異樣小球的,方法很簡單,就囉嗦了。

但是題目說明不知道異樣小球究竟是偏輕還是偏重,上面的方法就不靈了。一種可行的解法如下:

假設異樣小球比正常小球要重,從12個中抽取n個小球出來,包含異常小球的組合總是比不包含異常小球的組合要重。

將12個小球按編號為3進製的(000)至(102),如下:

000001

002010

011012

020021

022100

101102

為了方便下面的討論,先假設異常小球的編號是xyz,那我們的目標就轉化為如何稱3次來確定x,y,z的值。我們找出異樣小球的思路就是,通過稱量來不斷的縮小範圍,最終推理出異常小球的編號。

注意到編號中最低位為0,為1和2的各有4個。因此將最低位為1與2的分別放在天平兩邊稱一次。根據第一次稱的結果分為下面兩種情況:

(1)若第一次稱量時天平不平衡,則異樣小球必然在編號最低位為1或2的小球中,即z等於1或2 。

最低位為1或2的編號有下面8個:

001002

011012

021022

101102

於是我們就將搜尋範圍縮小到上面的8個小球中了。

注意到在這8個數中第二位為1和2的各有2個。就是下面這4個:

011012

021022

因此第二次稱量時,將上面列出的五個數中第二位為1和2的分別放天平兩邊。

根據第二次稱量的結果,可分為下面兩種情況:

<1>第二次稱量時天平不平衡,那麼我們可以肯定異樣小球必然在第二位編號為1或2的小球中,y等於1或2 。

不妨假設小球 011 + 012 >  021 + 022

假設第一次稱量結果是最低位為1的小球比最低位是2的要重,那麼我們可以肯定011號小球偏重或022號小球偏輕。

那麼第三次稱量只需將011號或022號中任意乙個與其他任意乙個小球稱量,若平衡則是正常小球,否則就是異常小球了。

<2>第二次稱量時天平平衡,則我們可以肯定異常小球編號第二位必然是0 。然後你可以仿照上面的做法通過編號的最高位來找出異常小球的編號。

(2)若第一次稱量時天平平衡,則異樣小球編號的最低位必然是0 。同樣你可以參考上面的思路通過編號的第2,3位來找到異樣小球,這裡就不囉嗦了。

另有這個問題的另一種解法供參考:

問題5:

答案:1,3,9,27

分析:第5個問題就是所謂「德•梅齊里亞克的砝碼問題」(the weight problem of bachet de meziriac)  。

這裡涉及到所謂「平衡三進製」的問題。平衡三進製,也叫對稱三進製,是一種以3為基數,各個三進製位權重為3^0,3^1,3^2…….,3^n ,以 -1,0,1為基本數碼的三進製計數體系。n位三進製數表示的範圍是 -((3^n) -1)/2 ~ ((3^n) -1)/2 。

需要明白的是,乙個砝碼可以放在要稱量的物品的同側,也可以放在對側,當然也可以不放。砝碼的三種狀態可以表示為:不放 ( 0 )、放在物品對側( +1 )、放在物品同側 ( -1 ) 。

因此各個砝碼碎片的重量就是各個平衡三進製數字的權重( 3^0 , 3^1 , 3^2 , 3^3 ),即 1 , 3 , 9 , 27 。

總結一下,上面1,2題利用二進位制原理解決,而3,4,5題利用三進製原理解決。總的來說原理是一樣的,核心的區別在於二進位制數字有2種狀態,三進製數字有3種狀態。 (廢話!)

問題6:

答案:康拓三分集

分析:首先用三進製數表示[0,1]間的小數,並將其畫在數軸上。你會發現第一次其實是挖掉了所有小數點後第1位為1的所有數,而第二次則是挖掉了小數點後第2位為1的所有數,按此類推。

實質上就是挖去了三進製表示法中所有含有數字1的數。因此剩餘的數就是[0,1]區間上三進製表示法中不包含1的所有數的集合。這個集合就是所謂的康拓三分集。

有趣的是:康拓三分集中元素的個數實質上是跟區間[0,1]上的實數個數是一樣多的(嚴格的表述應該是「等勢」)!

若集合a與集合b的元素可以建立一種「一一對應」關係,則我們說a與b「等勢」。例如:偶數集e跟自然數集n是等勢的,因為對於偶數集中的任何乙個數a,都可以在自然數集中找到乙個數a/2與之相對應,反之也成立。

下面來簡單證明康拓三分集跟[0,1]區間是等勢的。

首先用二進位制表示法來表示[0,1]區間中的小數。

然後將數字中所有「1」變為「2」,這樣在數字上就跟康拓三分集中的乙個數完全一致了。反過來,將康拓三分集中的任乙個數(二進位制表示)中的全部「2」變為「1」,就唯一的對應[0,1]區間的乙個二進位制小數。因此,康拓三分集與 [0,1]可以建立一一對應關係,因而是等勢的。

整體= 部分。 很神奇吧?一旦到了無窮的領域就會出現很多有趣的東西,例如,你可以證明一小段線段跟一條直線上的點是等勢的,完全平方數集合跟自然集是等勢的,等等。

二進位制的妙用

對於一些有限型別的多選,資料庫儲存使用中間表顯得比較累贅,但是把值或id拼成串來存又會使查詢統計不可用。這種情況下,可以採用二進位制的方式來處理。提供者 北京網優通達網路技術 致力於 優化 應用場景 對有限型別進行多選,其中有限型別指永遠不會超過64個的選項。比如 使用者註冊選擇感興趣的產品線。一共...

二進位制的妙用

表示某個元素是否在集合中 因為二進位制每一位只有0和1兩種情況,所以二進位制每一位可以對應某個元素是否在這個集合中。整個二進位制數就構成了乙個集合,對應二進位制位為1的元素就在集合中,為0的就不在集合中。表示對乙個集合的每乙個元素是否進行某種操作 整個二進位制數表示對乙個集合整體進行的某種操作,對應...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...