(一)题目:
有100瓶装水的水瓶,其中一瓶混了毒药,每只测试的小老鼠喝下毒药后要t1的时间才能显示出是否喝了毒药,并只给t2的时间来判断找出毒药的最少实验老鼠。
分析:
如果有两天时间,老鼠有3种生死可能性:0- 10 11;而一只老鼠在这2天时间里可以测3(3^1)个瓶子是否有毒并找出来,两只老鼠就可以测出9(3^2)个瓶子是否有毒并找出来,以此类推,x只老鼠可以测出4^x个瓶子并找出有毒的那瓶。
同理,如果有三天时间,老鼠有4种生死可能性 (0死 1生):0-- 10- 110 111。而一只老鼠在这3天时间里可以测4(4^1)个瓶子是否有毒并找出来,两只老鼠就可以测出16(4^2)个瓶子是否有毒并找出来,以此类推,x只老鼠可以测出4^x个瓶子并找出有毒的那瓶。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, t1, t2;
cin >> n >> t1 >> t2;
int m = t2 / t1 + 1;
for (int i = 0;; i++)
if (pow(m, i) >= n) {
cout << i; break;
}
}
(二)题目:
有100瓶装水的水瓶,其中一瓶混了毒药,每只测试的小老鼠喝下毒药后要一天的时间才能显示出是否喝了毒药,判断找出毒药的最少实验老鼠x.
分析:
假设有8瓶水,那么小老鼠试验后的可能性有:(0不喝水,1喝水)
0 0 0 --第一瓶
0 0 1 --第2瓶
0 1 0 --第3瓶
0 1 1 --第4瓶
1 0 0 --第5瓶
1 0 1 --第6瓶
1 1 0 --第7瓶
1 1 1 --第8瓶
其实这题和上面那题差不多,第一题会了的话,这题也是一样的思路可以写出来,相当于t1=1,t2=1;(代码自己改一下就行啦)