老鼠喝毒药问题分析及代码

这篇博客探讨了如何使用最少数量的小老鼠在有限时间内找出混有毒药的水瓶。通过分析不同时间长度下老鼠生存状态的可能性,得出结论:利用这些状态可以有效地检测和定位有毒的瓶子。文章提供了C++代码示例,展示了如何根据时间限制计算所需的老鼠数量。
摘要由CSDN通过智能技术生成

(一)题目:

        有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;(代码自己改一下就行啦)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值