面试题(程序03)
Posted bneglect
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题(程序03)相关的知识,希望对你有一定的参考价值。
- 猴子找大王
1 <?php 2 3 /************** 4 *猴子找大王 5 **************/ 6 7 function searchMonkeyKing(int $m, array $monkeys) 8 { 9 // $monkeys = range(1, $n); 10 // print_r($monkeys); 11 // m % n所得的余数就是被踢掉的猴子,然后把后面的数字移位,移到开头继续取余运算。如此循环 12 $len = count($monkeys); 13 $removeIndex = $m % $len == 0 ? ($len - 1) : ($m % $len - 1); //被移除的元素的索引, 取模等于0属于特殊情况 14 // 将被移除元素的下一个元素直到结尾移动到数组开头,被移除元素之前的元素移动到数组结尾(这样做就相当于移位了) 15 $behindMonkeys = array_slice($monkeys, $removeIndex + 1); 16 // print_r($behindMonkeys); 17 unset($monkeys[$removeIndex]); 18 // $frontMonkeys = array_diff($monkeys, $behindMonkeys); //因为这个原数组没有重复的元素,否则不要使用这个函数,会影响结果 19 $frontMonkeys = array_slice($monkeys, 0, $removeIndex); //如果原数组有相同的元素,使用这个函数更保险 20 // print_r($frontMonkeys); 21 // 然后在拼接两个数组,就做到了移位的效果 22 $newMonkeys = array_merge($behindMonkeys, $frontMonkeys); 23 // print_r($newMonkeys); 24 // 接下来可以使用递归,当数组中只有一个元素的时候返回。 25 if (count($newMonkeys) == 1) { 26 $monkeyKing = $newMonkeys[0]; 27 } else { 28 $monkeyKing = searchMonkeyKing($m, $newMonkeys); 29 } 30 return $monkeyKing; 31 } 32 33 // print_r(searchMonkeyKing(5, [1,2,3,4,5,6])); 34 35 function generateArray(int $m, int $n) 36 { 37 if ($n <= 1) { 38 return ‘请输入大于1的整数‘; 39 } 40 $array = range(1, $n); 41 $monkeyKing = searchMonkeyKing($m, $array); 42 return $monkeyKing; 43 } 44 45 print_r(generateArray(5, 1));
以上是关于面试题(程序03)的主要内容,如果未能解决你的问题,请参考以下文章