问:有1000个透明(但是不知道里面装的是什么)的瓶子,其中有一瓶装的是毒药。现给你一批老鼠,老鼠吃了7天才会有效果。你最少用多少只老鼠就能测出那一瓶是毒药。(限时七天)
网上找的一个哥们的数学解法。
解法:

两只老鼠可以完成四选一,1号老鼠吃一号和二号瓶子的药,2号吃二号和三号瓶子的药,若1号死,则一号是毒药,若二号死了,则三号是毒药,若两只都死了,则二号是毒药,若两只都活着,则四号是毒药,
三只老鼠可以完成八选一,四只老鼠可以十六选一,由此规律可以得出:2的N次方要大于等于瓶子的个数(N代表老鼠的个数)。
若为了完成一千选一,则至少需要10只老鼠。

八选一:{1,2,3}的子集合有几下风种,(1,2,3分别代表队,2,3号老鼠,)
{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}等八个子集合,依次分配给从1到8的药瓶,他们之前的对应关第如下:
{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}
1, 2, 3, 4,  5 ,   6,    7,    8 
由上可以得到:1号老鼠吃2,5,6,8号药,
                      2号老鼠吃3,5,7,8号药
                      3号老鼠吃4,6,7,8号药.
当没有老鼠死时,刚1号是毒药,如果一号老鼠死了,则2号瓶是毒药,若二号老鼠死了,则3号瓶是毒药,依此类推。。。。
当然你分配的顺序不一样,最后得到的结果也是不一样的,但是思路就是如此。

<?php
@header('Content-type:text/html;charset=UTF-8');

/* 
有1000个透明(但是不知道里面装的是什么)的瓶子,其中有一瓶装的是毒药。现给你一批老鼠,老鼠吃了7天才会有效果。你最少用多少只老鼠就能测出那一瓶是毒药。(限时七天)

author:besile
php实现如下:
*/
//print_r($_POST);
if(isset($_POST["totry"]) && !empty($_POST["totry"])){
    $str="";
    for ($i=1;$i<=10;$i++){
$str=$_POST["laoshu$i"].$str;//得到老鼠状态
}
//echo $str;
//echo bindec($str); 
$duyao=bindec($str); //得到是哪一瓶毒药
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>老鼠试毒</title>
    <meta name="author" content="besile" />
</head>
<body>
    <div style="width:800px;">
        有1000个透明(但是不知道里面装的是什么)的瓶子,其中有一瓶装的是毒药。现给你一批老鼠,老鼠吃了7天才会有效果。你最少用多少只老鼠就能测出那一瓶是毒药。(限时七天)<br />
        <br />
        <br />

    </div>
    <table>
        <form name="form1" action="" method="post">
            <tr >
                <td colspan="2">请选择老鼠的状态:</td>
            </tr>
            <?php 
            for($i=1;$i<=10;$i++) 
            { 
                ?>
                <?php 
                if(!empty($str)){
                    ?>
                    <tr>
                        <td>第<?php echo $i; ?>只老鼠:</td>
                        <td><input type="radio" name="laoshu<?php echo $i; ?>" <?php if($str[10-$i]=="1"){ ?> checked="checked" <?php } ?> value="1"/>
                            死了
                            <input type="radio" name="laoshu<?php echo $i; ?>" <?php if($str[10-$i]=="0"){ ?> checked="checked" <?php } ?> value="0"/>
                            活着</td>
                        </tr>
                        <?php }else{?>
                        <tr>
                            <td>第<?php echo $i; ?>只老鼠:</td>
                            <td><input type="radio" name="laoshu<?php echo $i; ?>" value="1"/>
                                死了
                                <input type="radio" name="laoshu<?php echo $i; ?>" checked="checked" value="0"/>
                                活着</td>
                            </tr>
                            <?php }
                        }?>
                        <tr>
                            <td></td>
                            <td><input type="submit" name="totry" value="试毒"/>   <a href="1114-3.php?t=<?php echo time(); ?>">刷新</a></td>
                        </tr>
                    </form>
                </table>

                <?php 
                if(isset($duyao) && $duyao>0){
                    ?>
                    <table>
                        <form name="form1" action="" method="post">
                            <tr >
                                <td colspan="2">一千瓶药水中:</td>
                            </tr>
                            <tr>
                                <td>毒药在:</td>
                                <td>第<input type="text" name="duyao" readonly="readonly"  value="<?php echo $duyao; ?>" style="width:36px;"/>瓶</td>
                            </tr>
                            <tr>
                                <td>解释如下:</td>
                                <td>老鼠编号从10到1,从1-1000瓶药水分别喂之。<br/></td>
                            </tr>
                            <tr>
                                <td></td>
                                <td><br/>喂食规则,将瓶号转化为2进制数,依次查看老鼠,某位值为1的,就喂食。<br/><br/></td>
                            </tr>

                            <tr>
                                <td></td>
                                <td >第<span style="color:#00F;"><?php echo $duyao; ?></span>瓶药水,转化成二进制数为<span style="color:#00F;"><?php echo $str; ?></span>,<br/><br/>喂食了<?php 
                                    for($i=1;$i<=10;$i++) 
                                    { 
                                        if($str[10-$i]==1){
                                            echo "第".$i."只老鼠," ;
                                        }
                                    }
                                    ?>
                                    但它们都死了,所以第<span style="color:#00F;"><?php echo $duyao; ?></span>瓶是毒药.</td>
                                </tr>
                            </form>
                        </table>
                        <?php }
                        ?>
                    </body>
                    </html>

解决 laravel-admin between datetime 假如数据库是时间戳int类型无法筛选。

laravel-admin默认的between->datetime(),查询默认是datetime类型,但是假如数据库是时间戳类型就会报错,又不想改底层文件的话可以试试加自定义筛选功能...

阅读全文

php解析英文语句,自动分解。

参考:https://www.php.net/manual/en/function.str-split.php 最近碰到一个问题,客户的英文地址太长,超出接口api字段长度,所以需要解析下语句分解发送。 ...

阅读全文

记录一个laravel-excel导出表格值为0导出excel显示空的解决方法。

最近在使用laravel-excel导出表格的时候,发现假如字段值为0的情况下,导出的excel中直接显示为空,找到一个方法解决,如下. 在laravel-excel的config配置中...

阅读全文

2 条评论

回复 Spring 取消回复