zoukankan      html  css  js  c++  java
  • php猴子称王或者约瑟夫难题

    问题描述:

      一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,

      输出最后那个大王的编号。

    约瑟夫问题:

      N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉

    php实现:

      原理是先构建一个n个人的数组,然后,根据报数数,第M逐一剔除数组的元素,保留最后剩余的那个

    <?php
    function yueSeFu($n,$m){
        //限制条件
        if(!is_int($n) || !is_int($m) || $n<2 || $m<2) return false;
        //获取猴子的编号
        $arr = range(1,$n);
        //初始化数组的下标
        $i = 0;
        while(count($arr) > 1){
            
            if(($i+1) % $m == 0){
                //数到出局数的人踢出局
                unset($arr[$i]);
            }else{
                //其他的添加到数组的最后面
                array_push($arr,$arr[$i]);
                //删除掉已被转移到后面的数组元素
                unset($arr[$i]);
            }
            $i++;//继续往后数
        }
        return array_values($arr)[0];
    }

     

  • 相关阅读:
    Git命令与使用
    Android与WebView的JS交互
    Android 中关于硬件加速的使用和问题
    Activity-生命周期和启动模式
    Activity-恢复与保存状态或数据
    Android中Paint的一些使用心得记录
    Java中sleep,wait的区别
    C#基本类型
    LeetCode74 搜索二维矩阵
    leetcode 43 字符串相乘 java
  • 原文地址:https://www.cnblogs.com/loveyoume/p/5914267.html
Copyright © 2011-2022 走看看