php实现约瑟夫算法 [猴子选大王]
最近看到群里有发一道面试题,感觉挺有意思,
直接上代码:
<?php /* 一群猴子排成一圈,按1,2,...,m依次编号。然后从第1只开始数,数到第n只,把它踢出圈,从它后面再开始数,再数到第n只,在把它踢出去..., 如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入n、m, 输出最后那个大王的编号。 约瑟夫算法,呵呵,看了网上的大虾们的代码,感觉很不容易理解,而且还繁琐,于是自己就写了段代码 */ function circling($m, $n) { $array = range(1, $m); $i = 0; do { $i++; $crr = current($array); if ( empty($crr) ) { reset($array); } if( count($array) == 1 ) { return current($array); } if( $i == $n ) { unset( $array[key($array)] ); $i = 0; continue; } next($array); } while (true); } echo circling(6, 4);

浙公网安备 33010602011771号