算法笔记——15个瓶子,4只老鼠,测试哪瓶有毒

看到今天一道算法题,就写了一下自己的思路,希望有大牛,看到这个题,能提出更好的想法,再进行交流学习,我只用了一点简单的C++ 进行实现

有15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒 

我的想法是,因为最多有一瓶有毒,所以只有,0瓶有毒,或者其中一瓶有毒,所以是16种状态,所以用4只老鼠的喝下水的存活状态标级 '0' 或者 '1',来进行标记对应的瓶子 

  1. 0000 => 无毒
  2. 0001 => 1号瓶
  3. 0010 => 2号瓶
  4. 0011 => 3号瓶
  5. 0100 => 4号瓶
  6. 0101 => 5号瓶
  7. 0110 => 6号瓶
  8. 0111 => 7号瓶
  9. 1000 => 8号瓶
  10. 1001 => 9号瓶
  11. 1010 => 10号瓶
  12. 1011 => 11号瓶
  13. 1100 => 12号瓶
  14. 1101 => 13号瓶
  15. 1110 => 14号瓶
  16. 1111 => 15号瓶

将水喂给当前瓶子编号每一位为 '1' 的老鼠,例如第7号瓶子,则给第二只,第三只,第四只老鼠喂瓶子里面的水,最后观察老鼠的存活状态,来判断是哪一瓶,比如最后是 '1011' 则是11号瓶有毒。

下面是代码实现,代码方面我觉得这就是一个从输入老鼠状态到判断是哪个瓶子有毒的过程。前面这个阶段,如果通过老鼠碰到是否有毒的水,来确认是否死亡状态,则需要知道水是否有毒,提前知道哪瓶,再去判断。则有些自欺欺人的味道

#include <iostream>
using namespace std; 

int main(){
	const int MOU_NUM = 4;//老鼠数量
	int mouse[MOU_NUM] = {0};//老鼠状态,'0'为存活,'1'为死亡
	int drug = 0;//有毒瓶子号
	for (int i = 0; i < MOU_NUM; i++)
	{
		cin>>mouse[i];//输入老鼠喝水后的存活状态
	}
	for (int i = 0; i < MOU_NUM; i++)
	{
		drug |= (mouse[i] << (MOU_NUM - i - 1));//进行位运算
	}
	//判断是否有毒
	if (drug == 0)
	{
		cout<<"没有有毒的"<<endl;
	}
	else{
		cout<<"有毒的是第"<<drug<<"瓶";
		return 0;
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值