題意:有n瓶藥劑,其中只有一瓶藥劑有毒。讓你用最少的小白鼠試出哪瓶有毒。你只有一次給任意只小白鼠各餵食任意種類藥劑的機會。spa
m只老鼠就能對應2^m種「生死狀態」的組合,給每種狀態分配一個種類的藥劑,而後給每隻老鼠餵食「若是它在這種藥劑對應的生死狀態下死去」的全部藥劑,就能夠根據發生的死亡狀況,分辨出哪瓶藥劑有毒。blog
好比老鼠數有3只。io
000 1class
001 2di
010 3co
100 4math
110 5return
011 6printf
101 7
111 8
給一號鼠喂4578
給二號鼠3568
給三號鼠2678。
因此答案爲(ceil)log2(n)。
#include<cstdio> #include<cmath> using namespace std; typedef long long ll; int T,n; int main(){ scanf("%d",&T); for(;T;--T){ scanf("%d",&n); if(n==1){ puts("0"); continue; } for(int i=1;i<=30;++i){ if((1<<i)>=n){ printf("%d\n",i); break; } } } return 0; }