題目:有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号位的人為所求解