一道算法之猴子当大王问题(约瑟夫环)

本文介绍了猴子选大王的问题,也称为约瑟夫环问题。问题描述了n只猴子围成一圈,按顺时针方向编号,并从1号开始报数,数到m的猴子出局。该过程持续进行,直至只剩一只猴子成为猴王。程序设计要求包括用户输入猴子数n和报数的结束数m,以及猴王的初始编号。文章还提及可以通过数学上的约瑟夫递推公式来解决此问题,并建议读者查阅更多资料以深入了解该问题和相关算法实现。
摘要由CSDN通过智能技术生成

 猴子选大王
 n只猴子围成一个圈,按照顺时针方向从1到n编号
然后从1号猴子开始,延顺时针方向报数,报到m的猴子出局
再从出局的猴子的下一只猴子开始报数,如此重复,直到剩下一只猴子,
它就是大王。

设计程序要求:
1)要求用户输入开始的猴子数n,报数的最后一个数字m
2)给出猴王的初始编号

function king($n,$m){
    //建一个连续数组给猴子编号
    $arr = range(1, $n);       
    $i = 1;
    while(count($arr)>1){
        //每次取出数组中最前面的猴子
        $fs = array_shift($arr);
        //如果没数到m或m的倍数,则将其重新插入到数组最后
        //数到了则直接剔除
        if($i%$m!=0){
            array_push($arr, $fs);
        }

        $i++;
    }
    return $arr[0];

}

echo king(7,3);

方法二:与一相同不过不叫易于理解

function mk($n,$m){

    $monkey = range(1,$n);
    $i=1;
    while(count($monkey)>1){
        if($i%$m==0){
            unset($monkey[$i-1]);
        }else{
            array_push($monkey,$monk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值