1、汉诺塔:打印出每一步做的操作和总行数;
//汉诺塔问题处理;
function HanNuoMove($n, $a, $b, $c, &$line)
{
if(1 === $n){
echo $line .'::'. $a .'->'. $c .'<br>';
$line++;
}else{
HanNuoMove($n - 1, $a, $c, $b, $line);
echo $line .'::'. $a .'->'. $c .'<br>';
$line++;
HanNuoMove($n - 1, $b, $a, $c, $line);
}
}
$line = 1;
HanNuoMove(5, 'a', 'b', 'c', $line);
2、猴子选大王:返回猴子王编号;
function getMonkeyKing($n, $m)
{
//初始化当前数数的位置和monkeys数组;
$curr = 0;
$arr = range(1, $n, 1);
//遍历到只剩最后一个;
$i = 0;
while(count($arr) > 1){
//($i+1)是猴子的位置,比如下标为0的是第一个;
if(0 == ($i+1)%$m){
unset($arr[$i]);
}else{
//没有被选中的猴子,添加到数组最后,并删除当前位置;
$arr[] = $arr[$i];
unset($arr[$i]);
}
$i++;
}
return array_shift($arr);
}
echo '猴子王是第'.getMonkeyKing(100, 9).'只候!';