题意:有n瓶药放在架子上,其中有一瓶是不死药,其他的都为毒药,要判断哪一瓶为毒药,用兔子来试药,每次让它喝其中的k瓶(可以重复喝),如果兔子活着,说明喝的k瓶中有不死药,反之则死亡,问在最坏的情况下死亡的兔子最少数,如果不能试出来,输出"-1".
首先是最坏的情况用最少的兔子,说明是在最坏的情况下来的,每次试药都有兔子死,例如有15瓶(1-15号),每次喝4瓶,第一次喝(1-4)瓶死,第二次喝(5-8)瓶死,第三次喝(9-12)瓶死,此时可确定不死药在13-15瓶中,接下来就是最少的了,假如第15瓶为不死药,那么用第四只兔子让它喝13,14和1-12中的两瓶。
当n=17 k=4时,喝忘前四次就知道了。
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
if(n==1)
printf("0\n");
else if(k==n)
printf("-1\n");
else if(k==1)
printf("%d\n",n-1);
else
{
if(n%k==0||n%k==1)
printf("%d\n",n/k);
else
printf("%d\n",n/k+1);
}
return 0;
}