下面舉例一道比較靈活的面試題:
有8瓶水,其中有1瓶水有毒。先需要若干小白鼠嘗試飲用每一瓶水,試問至少需要幾隻小白鼠能夠將有毒的水找出來?這道題的確可以用傳統的方法——安排8只小白鼠乙個個試喝。但是這樣子的效率肯定相當低下。因此我們要考慮下有沒有更好的辦法。
我們給所有的水編號0-7,將0到7之間的數轉化為二進位制如下:
十進位制二進位制數
0000
1001
2010
3011
4100
5101
6110
7111
每只小老鼠有兩種狀態:中毒與不中毒。當每個數化為二進位制之後,將這些毒水按照二進位制位是否為1混合起來,然後讓小白鼠按照如下**試喝:
十進位制rat[2]
rat[1]
rat[0]00
0010
0120
1030
1141
0051
0161
1071
11-4,5,6,7
2,3,6,7
1,3,5,7
根據3只老鼠中毒與否進行組合就能夠推斷出哪瓶水有毒。
除了老鼠的試喝問題,也有一些可以用到二進位制妙用的問題,例如猜數字。
心中默默想乙個0-31之間的數字,然後回答下面的問題:回答完上述問題,就能夠根據答案猜出你所想的數字了。你想的數字是否在這裡:
1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
你想的數字是否在這裡:
2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31
你想的數字是否在這裡:
4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31
你想的數字是否在這裡:
8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31
你想的數字是否在這裡:
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
原理即為上文的二進位制技巧。
二進位制演算法
首先是6個二進位制的運算子 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變...
二進位制運算技巧
假設都在x86或x86 64架構cpu上進行運算,二進位制基本運算包括,加減乘除 與 或 異或 同或 移位等 假設n 為 32 位整形數,取正整數n除以8的餘數 n 0x07 假設n 為 32 位整形數,取正整數n除以16的餘數 n 0x0f 假設n 為 32 位整形數,8位對齊 n 7 0xfff...
二進位製小技巧
二進位制嘛,可以加速 a 2 a 1 a 2 a 1 2 b 1 b 可以判斷一些東西 a 1 a 2 1 a 1可以求出數的乙個相鄰數 等等等等 下面我會在做題目時記錄一下位運算的技巧 這題讓我們統計區間顏色種類,種類不超過30種 那我們可以用位運算來壓縮 開乙個int,轉換成二進位制後可以清晰的...