• PHP猴子选大王问题


    问题简介:n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王.

    这里使用一个递推公式:

    • f[i] = 0  i = 1
    • f[i] = (f[i-1] + m) % i   i >= 2

    f[i]表示有i只猴子时,每次剔除m只猴子,最后剩下的大王坐标(坐标从0开始),只有1只猴子时,大王坐标为0,依次递推,即可求得有i只猴子时最后的大王坐标

     1 <html>
     2     <body>        
     3         <?php
     4             function monkeyKing($n, $m) {    //$n为猴子总数,$m为剔除猴子步长
     5                 $s = 0;    //$s为大王坐标,只有一只猴子时,大王坐标为0
     6                 for($i = 2; $i <= $n; $i++) {    //依次向后递推,求到共有$n只猴子,剔除步长为$m时的大王坐标
     7                     $s = ($s + $m) % $i;    //大王坐标递推公式
     8                 }
     9                 return $s;
    10             }
    11             
    12             echo monkeyKing(6, 2);
    13         ?>
    14     </body>
    15 </html>

    页面输出

    4

     

     

     

  • 相关阅读:
    题目1101:计算表达式
    九度oj 题目1107:搬水果
    [Hihocoder] 字符串排序
    [hzwer] 模拟T
    [Luogu] 宝藏
    [Luogu] 列队
    [Luogu] 奶酪
    [Luogu] 逛公园
    [Luogu] 时间复杂度
    [Luogu] 小凯的疑惑
  • 原文地址:https://www.cnblogs.com/zemliu/p/2483738.html
Copyright © 2020-2023  润新知