题目:有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号位的人为所求解
新闻热点
疑难解答
图片精选