題目:有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號位的人為所求解
新聞熱點
疑難解答
圖片精選