#include<stdio.h>
int main(){
int t;
scanf("%d",&t);
while(t--){
long long n;
scanf("%lld",&n);
int ans=0;
while(n>1){
if(n-n/2>n/2)n=n-n/2;
else n/=2;
ans++;
}
printf("%d\n",ans);
}
}
思路:
相当于一个二分操作,每一次检测一半的酒有没有毒,这样效率最高。每一次将酒对半分,然后用老鼠试毒,之后将有毒的一组接着二分,直到剩下最后那个。
最坏情况就是每次二分时不一定平均分配,会有奇数的情况,好巧不巧那瓶毒酒一直在分完瓶数多的那一堆,于是我们每一次取二分后剩下酒较多的那一堆继续操作,这样就能得到最坏情况下的最小值