题目如下:
假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环(如图)
选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞
求多少天后, 兔子与狼在一个洞里。
请将该函数补充完成: function ($N, $l, $k)
分析
这种图应该叫约瑟夫环,其实可以简单化,就从0号洞一起开始走,假如狼走的快,兔子走的慢,那狼肯定走在前面,如果狼走几天后绕一圈回来,就得重新开始追兔子(不是重新从起点开始追)即相当于狼在兔子的后面,所以狼此时的洞数就得减去一圈,即N。兔子同理,如此反复,直到兔子和狼的洞数相同。上代码
<?php
function runTest($N, $l, $k){
$day = $wolf = $rabbit = 0;
while(true){
$day++;
$rabbit = ($rabbit + $l) % $N;//这里用的取余的方式将兔子和狼的步数重置,也可以用注释中的
$wolf = ($wolf + $k) % $N;
// $rabbit = $rabbit + $l;
// $wolf = $wolf + $k;
// if($rabbit / $N > 1) $rabbit = $rabbit - $N;
// if($wolf / $N > 1) $wolf = $wolf - $N;
if($rabbit == $wolf) break;
}
return $day;
}
echo runTest($argv[1], $argv[2], $argv[3]);