方法一
function getNum($arr,$num){
$i=1;while(count($arr)>1){
if($i%$num==0) {
unset($arr[$i-1]);
}else{
array_push($arr,$arr[$i-1]);
unset($arr[$i-1]);
}
$i++;
}
return $arr;
}
$count=10;
$num=7;
$arr=range(1,$count);
$result=getNum($arr,$num);
print_r($result);
方法二
function getNum($n,$m){
$r=0;
for ($i=2; $i<=$n ; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(getNum(10,7));
方法三
function
monkeySelectKing(
$n
,
$m
)
{
//猴子的初始數量不能小於2
if
(
$n
<2)
{
return
false;
}
$arr
=range(1,
$n
);
//將猴子分到一個數組裏,
數組的值對應猴子的初始編號
$unsetNum
=0;
//定義一個變量,記錄猴子的報數
for
(
$i
= 2;
$i
<=
$n
*
$m
;
$i
++)
//總的循環次數不知道怎麼計算,
{
//不過因爲循環中設置了return,所以$m*$len效率還可以
foreach
(
$arr
as
$k
=>
$v
)
{
$unsetNum
++;
//每到一個猴子,
猴子報數+1
//當猴子的報數等於淘汰的數字時:淘汰猴子(刪除數組元素)
//報數歸0(下一個猴子從1開始數)
if
(
$unsetNum
==
$m
)
{
//
echo "<pre>";//打開註釋,可以看到具體的淘汰過程
//
print_r($arr);
unset(
$arr
[
$k
]);
//淘汰猴子
$unsetNum
=0;
//報數歸零
if
(
count
(
$arr
)==1)
//判斷數組的長度,
如果只剩一個猴子, 返回它的值
{
return
reset(
$arr
);
}
}
}
}
}
var_dump(monkeySelectKing(6,
3));