题目:有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 1


10号位的人为所求解