PHP算法题02-猴子当大王

作者: 温新

分类: 【PHP算法题】

阅读: 2423

时间: 2020-09-13 14:28:53

题目

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。

解析

1、首先将猴子从1到n编号存放到数组中

2、对猴子的总个数进行循环

3、循环时将数到编号的猴子从数组中删除

4、将被被踢的猴子从原来位置移动到数组尾部,移动后删除原猴子的位置编号

5、循环时,判断猴子数组个数大于1则继续循环

6、剩下最后一个编号的猴子则是大王

实现

方式一

<?php

/**
 * 猴子当大王
 * 
 * @param  int $n 猴子总数
 * @param  int $m 数到第几只的那只猴子被踢出去
 * @return int 
 */
function monkey_king(int $n , int $m):int {
	// 构造猴子总数的数组
	$monkeys = range(1 , $n);
	$i = 0;
	// 循环判断猴子大王是否计算出来
	while (count($monkeys) > 1) {
		// 判断是否为要踢出去的猴子
		if (($i + 1) % $m == 0) {
			// 删除被踢出去的猴子
			unset($monkeys[$i]);
		} else {
			// 将没有被踢出的猴子压入猴子数组尾部
			array_push($monkeys, $monkeys[$i]);
			unset($monkeys[$i]);
		}
		$i++;
	}
	return current($monkeys);
}

$monkey = monkey_king(5 , 3);
echo '猴王是:' . $monkey . '<br>';

请登录后再评论