首页 > 编程 > PHP > 正文

PHP实现约瑟夫环

2019-11-06 06:36:45
字体:
来源:转载
供稿:网友

题目:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?

思想:1.设定数组,把这些人按照编号存入数组,且加一个标记位,0代表没有被移出,1代表移出。

           2.执行无限循环,在每一次循环中,对整个数组进行遍历,判断每个数组元素的标记为是否为0,如果为0则继续报数,如果此数能被3整除,该数组元素标记位设为1,并且移出的总人数+1。当移出总人数达到16人,则break退出无限循环,剩下的为胜者。

代码:

<?php$person = array(    array("0",0),    array("1",0),    array("2",0),    array("3",0),    array("4",0),    array("5",0),    array("6",0),    array("7",0),    array("8",0),    array("9",0),    array("10",0),    array("11",0),    array("12",0),    array("13",0),    array("14",0),    array("15",0),    array("16",0),);    //报数    $j = 0;    //移出位人数    $num = 0;        //执行循环        while(1)        {            //遍历整个数组            for($k=0;$k<17;$k++)            {                //如果此数组元素没有移出位                if($person[$k][1]==0)                {                    //此数组元素继续报数                    $j=$j+1;                    //如果报的数能被3整除                    if($j%3==0)                    {                        //此数组元素标记移出位                        $person[$k][1]=1;                        //出位人数+1                        $num=$num+1;                    }                }            }            //如果出位人数达到16人,则最后一人获胜,退出循环            if($num==16)            {                break;            }        }      var_dump($person) ;?>

结果:

array (size=17)  0 =>     array (size=2)      0 => string '0' (length=1)      1 => int 1  1 =>     array (size=2)      0 => string '1' (length=1)      1 => int 1  2 =>     array (size=2)      0 => string '2' (length=1)      1 => int 1  3 =>     array (size=2)      0 => string '3' (length=1)      1 => int 1  4 =>     array (size=2)      0 => string '4' (length=1)      1 => int 1  5 =>     array (size=2)      0 => string '5' (length=1)      1 => int 1  6 =>     array (size=2)      0 => string '6' (length=1)      1 => int 1  7 =>     array (size=2)      0 => string '7' (length=1)      1 => int 1  8 =>     array (size=2)      0 => string '8' (length=1)      1 => int 1  9 =>     array (size=2)      0 => string '9' (length=1)      1 => int 1  10 =>     array (size=2)      0 => string '10' (length=2)      1 => int 0  11 =>     array (size=2)      0 => string '11' (length=2)      1 => int 1  12 =>     array (size=2)      0 => string '12' (length=2)      1 => int 1  13 =>     array (size=2)      0 => string '13' (length=2)      1 => int 1  14 =>     array (size=2)      0 => string '14' (length=2)      1 => int 1  15 =>     array (size=2)      0 => string '15' (length=2)      1 => int 1  16 =>     array (size=2)      0 => string '16' (length=2)      1 => int 110号位的人为所求解


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表