狼与兔子

一道考验逻辑的运算题

问题

假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环(如图)

rabbitAndWolf

选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞

求多少天后, 兔子与狼在一个洞里。

请将该函数补充完成: function ($N, $l, $k)

分析

其实一开始看到这张图, 我以为是类似于约瑟夫环那样的问题, 需要用PHP来实现链表, 但仔细思考之后难度并不大

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function rabbitAndWolf($N, $l, $k)
{
$day = 0;
$rabbit = 0;
$wolf = 0;

while (true) {
$day++;

$rabbit = ($rabbit + $l) % $N;
$wolf = ($wolf + $k) % $N;

// echo "rabbit at $rabbit" . PHP_EOL;
// echo "wolf at $wolf" . PHP_EOL;

if ($wolf === $rabbit) {
echo $day . PHP_EOL;
break;
}
}
}

rabbitAndWolf(
(int)$argv[1],
(int)$argv[2],
(int)$argv[3]
);

嘛! 偶尔开动脑筋, 还是很顺畅的!

// emmm, 话说我也忘记怎么用php实现链表了, 😅, 抽时间巩固一下吧