猴子选大王(约瑟夫环)代码

<?php
//猴子选大王
 function yuesefu($n,$m) {  
     $r=0;  
     for($i=2; $i<=$n; $i++) {
         $r=($r+$m)%$i;  
     }
     return $r+1;  
 }  
 echo yuesefu(10,3)."是猴王";
// 每个猴子出列后,剩下的猴子又组成了另一个子问题。只是他们的编号变化了。第一个出列的猴子肯定是a[1]=m(mod)n(m
// /n的余数),他除去后剩下的猴子是a[1]+1,a[1]+2,…,n,1,2,…a[1]-2,a[1]-1,对应的新编号是1,2,3…n-1。
// 设此时某个猴子的新编号是i,他原来的编号就是(i+a[1])%n。于是,这便形成了一个递归问题。假如知道了这个子问题(
// n-1个猴子)的解是x,那么原问题(n个猴子)的解便是:(x+m%n)%n=(x+m)%n。问题的起始条件:如果n=1,那么结果就是1
// 。


// (x+m%n)%n=(x+m)%n





//  int ysfdg ( int sum, intvalue, intn)
// {
//     if ( n == 1 )
//         return ( sum + value - 1 ) %sum;
//     else
//         return ( ysfdg ( sum-1, value,n-1 ) +value ) %sum;
// }

猜你喜欢

转载自blog.csdn.net/weixin_43665429/article/details/87902836