面试题(程序03)
- 猴子找大王
<?php /************** *猴子找大王 **************/ function searchMonkeyKing(int $m, array $monkeys) { // $monkeys = range(1, $n); // print_r($monkeys); // m % n所得的余数就是被踢掉的猴子,然后把后面的数字移位,移到开头继续取余运算。如此循环 $len = count($monkeys); $removeIndex = $m % $len == 0 ? ($len - 1) : ($m % $len - 1); //被移除的元素的索引, 取模等于0属于特殊情况 // 将被移除元素的下一个元素直到结尾移动到数组开头,被移除元素之前的元素移动到数组结尾(这样做就相当于移位了) $behindMonkeys = array_slice($monkeys, $removeIndex + 1); // print_r($behindMonkeys); unset($monkeys[$removeIndex]); // $frontMonkeys = array_diff($monkeys, $behindMonkeys); //因为这个原数组没有重复的元素,否则不要使用这个函数,会影响结果 $frontMonkeys = array_slice($monkeys, 0, $removeIndex); //如果原数组有相同的元素,使用这个函数更保险 // print_r($frontMonkeys); // 然后在拼接两个数组,就做到了移位的效果 $newMonkeys = array_merge($behindMonkeys, $frontMonkeys); // print_r($newMonkeys); // 接下来可以使用递归,当数组中只有一个元素的时候返回。 if (count($newMonkeys) == 1) { $monkeyKing = $newMonkeys[0]; } else { $monkeyKing = searchMonkeyKing($m, $newMonkeys); } return $monkeyKing; } // print_r(searchMonkeyKing(5, [1,2,3,4,5,6])); function generateArray(int $m, int $n) { if ($n <= 1) { return ‘请输入大于1的整数‘; } $array = range(1, $n); $monkeyKing = searchMonkeyKing($m, $array); return $monkeyKing; } print_r(generateArray(5, 1));
猴子找大王
相关推荐
spinachcqb 2020-07-27
zhaowj00 2020-06-26
zhouyuqi 2020-06-13
寻常白昼 2020-06-13
有梦就能实现 2020-06-05
Nicolase 2020-05-30
清风徐来水波不兴 2020-05-28
stefan0 2020-04-22
doupoo 2020-05-04
清风徐来水波不兴 2020-04-17
xcguoyu 2020-03-28
缘起宇轩阁 2020-01-31
amberom 2019-11-02
xcguoyu 2019-10-29
hebiwtc 2019-06-24
CoderLiu 2019-09-12