今天碰到一个有意思的数学问题。想了半天终于搞定。
但是如何用代码解决这个问题呢?忙了一中午,搞定了一个。
问题一:称鸡蛋的问题
原题
100个鸡蛋,每袋装10个,其中九个袋里装的鸡蛋每个都是50克,
另一个袋里装的每个都是40克。这10个袋子混在一起,只准用秤称一次,
你能找出哪一个袋里装的是40克重的鸡蛋?
小明的称法:先给这10袋鸡蛋别人编上1~10号,然后从第1袋中拿出1个鸡蛋,
从第2袋中拿出2个鸡蛋,以此类推,然后称出这55个鸡蛋的重量,就能确定出哪一个袋里
装的是40克重的鸡蛋。
代码部分
<div class="container ">
<div class="header"><h1>小明称鸡蛋的问题</h1></div>
<h4>
<table border="1" cellpadding="10">
<tr>
<td bgcolor="#cccccc" align="center" width="100">编号</td>
<td bgcolor="#cccccc" align="center" width="200">相对质量</td>
</tr>
<?php
for ($distance = 1; $distance <= 10; $distance ++) {
echo "<tr>
<td align=\"center\">".$distance."</td>
<td align=\"center\">".(2750-$distance*10 )."</td>
</tr>\n";
}
?>
</table>
<strong>说明:</strong>
假如55个鸡蛋,每个都是50克,总质量:55X50=2750
但是因为小明从10个袋子中都拿了鸡蛋称。所以55个鸡蛋不可能每个都是50克。<br>
所以就会出现以上10种情况。根据小明称55个鸡蛋的质量<br>
就可以一次判断出来哪个编号袋子里的鸡蛋是轻的<br>
*** 相对质量=2750-轻鸡蛋数量X(50-40)<br>
*** 轻鸡蛋数量=袋数编号
</h4>
</div>
返回结果
- 小明称鸡蛋的问题
编号 相对质量
- 2740
- 2730
- 2720
- 2710
- 2700
- 2690
- 2680
- 2670
- 2660
- 2650
- 说明: 假如55个鸡蛋,每个都是50克,总质量:55×50=2750
但是因为小明从10个袋子中都拿了鸡蛋称。所以55个鸡蛋不可能每个都是50克。
所以就会出现以上10种情况。根据小明称55个鸡蛋的质量,
就可以一次判断出来哪个编号袋子里的鸡蛋是轻的
相对质量=2750-轻鸡蛋数量x(50-40)
轻鸡蛋数量=袋数编号
问题二:找轻球的问题
原题
有8个球,编号分别是1至8,其中有6个球一样重。另外两个球都轻1克。
为了找出这两个轻球,用天平称了三次,结果如下:
第一次: 1+2>3+4
第二次:5+6<7+8
第三次:1+3+5=2+4+8
判断:两个轻球分别是几号?
代码部分
<div class="container">
<?php
$count = 8;
$normal = 1;
$light = 0;
$arr = array();
for($i=0;$i<$count;$i++) {
for($j=$i+1;$j<$count;$j++) {
$case = array_fill(1, $count, $normal);
$case[$i] = $case[$j] = $light;
$arr[] = $case;
};
} ;
$res = array();
foreach($arr as $case) {
$conditions = array(
$case[1]+$case[2] > $case[3]+$case[4],
$case[5]+$case[6] < $case[7]+$case[8],
$case[1]+$case[3]+$case[5] === $case[2]+$case[4]+$case[8]
);
if($conditions[0]&&$conditions[1]&&$conditions[2]) {
$res[] = $case;
};
};
print_r($res);
?>
</div>
结果反馈
Array ( [0] => Array ( [1] => 1 [2] => 1 [3] => 1 [4] => 0 [5] => 0 [6] => 1 [7] => 1 [8] => 1 ) )
说明:Array [4] [5] => 0 所以计算出结果是 4和5