約瑟夫環
1、一群猴子排成一圈,按1,2,…,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。要求程式設計模擬此過程,輸入m、n, 輸出最後那個大王的編號。
function king($n, $m){
//建立1到n陣列
$monkeys = range(1, $n);
$i=0;
//迴圈條件為猴子數量大於1
while (count($monkeys)>1) {
//$i為陣列下標;$i+1為猴子標號
if(($i+1)%$m==0) {
//餘數等於0表示正好第m個,刪除,用unset刪除保持下標關係
unset($monkeys[$i]);
} else {
//如果餘數不等於0,則把陣列下標為$i的放最後,形成一個圓形結構
array_push($monkeys,$monkeys[$i]);
unset($monkeys[$i]);
}
//$i 迴圈+1,不斷把猴子刪除,或 push到陣列
$i++;
}
//猴子數量等於1時輸出猴子標號,得出猴王
return current($monkeys);
}
echo king(6,3);
range(m,n)
建立一個包含從 "m" 到 "n" 之間的元素範圍的陣列range(1, 5); // [0=>1, 1=>2, 2=>3, 3=>4, 4=>5];
unset(...$str)
銷燬給定的變數$array=[1,2,3,4,5]; unset($array[2]); // [0=>1, 1=>2, 3=>4, 4=>5];
array_push($array, ...$str)
向陣列尾部插入變數$array=[1, 2]; array_push($array, 3, 4); // [1, 2, 3, 4 ];
current()
輸出陣列中的當前元素的值end() - 將內部指標指向陣列中的最後一個元素,並輸出 next() - 將內部指標指向陣列中的下一個元素,並輸出 prev() - 將內部指標指向陣列中的上一個元素,並輸出 reset() - 將內部指標指向陣列中的第一個元素,並輸出 each() - 返回當前元素的鍵名和鍵值,並將內部指標向前移動
本作品採用《CC 協議》,轉載必須註明作者和本文連結