將一羣猴子排成一圈,按照猴子數按照1,2,...,n依次編號。而後從第1只開始數,定義數m個猴子,以後將數到的猴子將它踢出圈,從它後面再開始數, 再數到第m只,在把它踢出去...,如此循環的進行下去,直到最後只剩下一隻猴子爲止,那隻猴子就是大王。php
此算法問題來自於約瑟夫問題(來源維基百科)算法
約瑟夫斯問題(有時也稱爲約瑟夫斯置換),是一個出如今計算機科學和數學中的問題。在計算機編程的算法中,相似問題又稱爲約瑟夫環。 有n個囚犯站成一個圓圈,準備處決。首先從一我的開始,越過 k-2我的(由於第一我的已經被越過),並殺掉第k我的。接着,再越過 k-1我的,並殺掉第k我的。這個過程沿着圓圈一直進行,直到最終只剩下一我的留下,這我的就能夠繼續活着。 問題是,給定了n和k,一開始要站在什麼地方纔能避免被處決?編程
<?php //算法問題 // function xdw($m, $n){ //存猴子名稱 $arr = array(); //給猴子定義名稱 $a = "a"; for($i=0; $i<$m; $i++){ $arr[] = $a++; } //print_r($arr); //定義猴子排序個數 $j = 0; while (count($arr) > 1) { if($j%$n==0){ unset($arr[$j]); }else{ $arr[] = $arr[$j]; unset($arr[$j]); } $j++; } return $arr; } print_r(xdw(40, 3)); ?>