有 3 只老鼠,8 瓶水,其中一瓶有毒,喝到有毒的水之后,老鼠一周后会准时死亡。...

题目
有 3 只老鼠,8 瓶药,其中一瓶有毒,喝到有毒的药之后,老鼠一周后会准时死亡。按照要求,写个算法,如何在一周内找出哪瓶有毒。(以程序语言实现,语言不限。)

基本思路
给瓶子编号 0-7,并把编号翻译成二进制串,刚好可以用三位二进制来表示。让三只老鼠分别对应三位二进制,然后形成如下交叉表:

1306719-20181216125953167-985379029.png

其中二进制位为 1 的地方表示哪只老鼠吃哪瓶药,即:
老鼠 1 应该喝 4,5,6,7 号的药;
老鼠 2 应该喝 2,3,6,7 号的药;
老鼠 3 应该喝 1,3,5,7 号的药。
最后观察的时候,可以根据老鼠死了的情况,0 表示没死,1 表示死了。
比如三只老鼠死了的情况是 (1,0,1),则表示 5 号药是有毒的。因为只有这种情况下才会导致老鼠 1 和老鼠 3 死掉。

C++ 实现

#include<iostream>

using namespace std;
int main()
{
    int NUM_MOUSE = 3;
    int mouseDead[NUM_MOUSE];

    cout << "输入老鼠存活情况,1-死了,0-活着,用空格隔开:" << endl;
    for (int i = 0; i < NUM_MOUSE; i++)
    {
        cin >> mouseDead[i];
    }

    int drug = 0;
    for (int i = 0; i < NUM_MOUSE; i++)
    {
        int dead = mouseDead[i];
        drug |= (dead << (NUM_MOUSE - i - 1));
    }
    cout << "有毒的是 " << drug << " 号药!" << endl;

    return 0;
}

运行结果
输入老鼠存活情况,1-死了,0-活着,用空格隔开:
1 0 1
有毒的是 5 号药!

思维拓展
1000 瓶药中找出有毒的哪瓶,毒性一周后准时发作,一周内最少需要多少只老鼠。
参考答案

答案是十只,也就是说 10 位二进制最大能表示 1024 个数字。(从 0 开始算起)

转载于:https://www.cnblogs.com/hglibin/p/10126206.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值