1000 瓶無色無味的藥水,其中有一瓶毒藥,10只小白鼠拿過來做實驗。喝了無毒的藥水第二天沒事兒,
喝了有毒的藥水後第二天會死亡。如何在一天之內(第二天)找出這瓶有毒的藥水?
有n被毒酒,求檢驗出毒酒所用的最少小白鼠?
利用二進位制思想
可以首先把小白鼠用二進位制表示,然後
巧妙的利用1和0標誌位來表示喝與不喝
比如有4瓶
00 01 10 11
就可以找兩隻小白鼠
1號喝3 4 (也就是所有第一位是1的)
2號喝1 2就可以得到所有情況
如果1號死了就是3有毒
2死了就是2有毒
1 2都死了就是4有毒
都沒死就是1有毒
這樣就很巧妙的解出了原題,1000小於2^10(1024),按剛才的邏輯10只就可以找出毒酒
通過找規律可以得出(2^n)+1~2^(n+1)之間都是需要n+1只
就可以先判斷這個數是不是2的冪,有三種方法
1、判斷此數二進位制中是不是有乙個1,具體演算法自己實現;
2、x == x&(-x) 由於x&(-x)返回的是從右到左第乙個1所表示的大小;對於110010000 返回的就是 10000;所以可以用來判斷;
3、x&(x-1)==0 舉個例子:1000 它減1變成 0111 與運算得0 所以是2的冪次方;
然後迴圈一下就可以了,每次除2,如果是2的冪最後再加上1就是結果了。
奉上鄙人的**:
#include #include#include
intmain()
while(n/2>=1
) printf(
"%d\n
",ans);
}return0;
}
有的時候看似不可能的問題總是能找到巧妙的解法,尤其是一件事物有二面性的時候,
一定要考慮二進位制,當然二進位製用的6還要熟練位運算qwq
巧妙運用二進位制驗證許可權
在許可權分配中有多個許可權級別,不同使用者分別有多個不同的許可權。論壇的許可權 檢視 發帖 投票 搜尋 使用者的許可權 使用者a 檢視 發帖 使用者b 檢視 使用者c 檢視 發帖 投票 搜尋 分析 有四種不同的許可權級別,總共2 4種許可權分配方式。像這樣許可權等級劃分和不同級別使用者的許可權分配採...
巧妙運用二進位制驗證許可權
在許可權分配中有多個許可權級別,不同使用者分別有多個不同的許可權。論壇的許可權 檢視 發帖 投票 搜尋 使用者的許可權 使用者a 檢視 發帖 使用者b 檢視 使用者c 檢視 發帖 投票 搜尋 分析 有四種不同的許可權級別,總共2 4種許可權分配方式。像這樣許可權等級劃分和不同級別使用者的許可權分配採...
二進位制巧妙運用 二進位制存多個布林型別狀態值
使用第三個變數來接收 int c 0 c a c 等於1 a b a 等於2 b c b 等於1當然靈活運用,這種方式肯定是不推薦的啦!重新整理一下你對小學數學的理解 a a b a 等於3 b a b b 等於1 a a b a 等於2 既然是程式設計師,我們用程式設計師的方式來做一下,還可以深刻...