面试题(程序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