10-21 4,731 views
问:有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>
学习带来乐趣,谢谢博主!
你自己写的么?