演算法篇 二進位制的使用技巧

2021-10-10 04:22:58 字數 1121 閱讀 1643

下面舉例一道比較靈活的面試題:

有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,轉換成二進位制後可以清晰的...