题目:蒂莫西驾车从巴黎出发,在公路上匀速行驶.他经过一个里程碑(千米碑),是由三个数码组成的三位数,30分后她又经过一个里程碑,还是那个三个数码组成的新的三位数,又经过了50分钟经过第三个里程碑,竟然还是那三个数码组成的新的三位数,问:蒂莫西的车速?
思路:
首先明确已知的条件,
1.3个数组成的里程碑=>三位数小于1000
2.这3个里程碑都是整数
3.这3个里程碑都是由3个相同数字但是位置不同组合而成
4.这是匀速行驶的汽车=>知道了第一第二的里程碑就可以知道车速从而推出第三个里程碑
5.里程碑之间的时间分别是30分钟和50分钟
首先用第一个里程碑从1开始,利用穷举法,第二个里程碑利用穷举法递增,根据条件3可以快速判断是否满足条件,
当第二个里程碑确定了,就表示车速已经确定,从而第三个里程碑能推测出来,然后在利用条件3判断是否满足条件
public function speed()
{
// 返回比较的数组
$change_array = function ($number){
$tmp = $number + 1000;// 前面补充0
$tmp_num = substr($tmp, 1, 3); // 切去第一个1
$tmp_array = str_split($tmp_num);// 字符串变成数组
sort($tmp_array);// 排序
return $tmp_array;
};
// 第一个公里碑
for ($one = 1; $one < 1000; $one++) {
$one_array = $change_array($one);
// 第二个公里碑
for ($two = $one + 1; $two < ((3000 + 5 * $one) / 8); $two++) {
$two_array = $change_array($two);
if ($one_array !== $two_array) continue;//不满足都是由同样的数字组成的公里数
$speed = ($two-$one) * 2; // 得到速度
$thr = (($speed / 60) * 50) + $two; // 计算出第三个公里碑的距离
$thr_array = $change_array($thr);
// 符合第一个要求
if ($two_array == $thr_array) {
echo '第一个里程碑是' . $one . ' ';
echo '第二个里程碑是' . $two . ' ';
echo '第三个里程碑是' . $thr . ' ';
echo '每小时' .$speed . '公里';
echo "\n\r";
} else {
continue;
}
}
}
}