題目:有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)
}}//如果出位人數達到
16人,則最後一人獲勝,退出迴圈
if(
$num
==16)}
var_dump(
$person) ;
?>
結果:
array(size=17)10號位的人為所求解0 =>array(size=2)
0 =>
string
'0'(length=1)
1 =>
int1
1 =>array(size=2)
0 =>
string
'1'(length=1)
1 =>
int1
2 =>array(size=2)
0 =>
string
'2'(length=1)
1 =>
int1
3 =>array(size=2)
0 =>
string
'3'(length=1)
1 =>
int1
4 =>array(size=2)
0 =>
string
'4'(length=1)
1 =>
int1
5 =>array(size=2)
0 =>
string
'5'(length=1)
1 =>
int1
6 =>array(size=2)
0 =>
string
'6'(length=1)
1 =>
int1
7 =>array(size=2)
0 =>
string
'7'(length=1)
1 =>
int1
8 =>array(size=2)
0 =>
string
'8'(length=1)
1 =>
int1
9 =>array(size=2)
0 =>
string
'9'(length=1)
1 =>
int1
10 =>array(size=2)
0 =>
string
'10'
(length=2)
1 =>
int0
11 =>array(size=2)
0 =>
string
'11'
(length=2)
1 =>
int1
12 =>array(size=2)
0 =>
string
'12'
(length=2)
1 =>
int1
13 =>array(size=2)
0 =>
string
'13'
(length=2)
1 =>
int1
14 =>array(size=2)
0 =>
string
'14'
(length=2)
1 =>
int1
15 =>array(size=2)
0 =>
string
'15'
(length=2)
1 =>
int1
16 =>array(size=2)
0 =>
string
'16'
(length=2)
1 =>
int1
約瑟夫環實現
約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 1 2 3 4 5 6 7 8 3,6 出圈 剩下7 8 1 2 4 5 7 8...
php解決約瑟夫環
今天偶遇一道演算法題 約瑟夫環 是乙個數學的應用問題 一群猴子排成一圈,按1,2,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去 如此不停的進行下去,直到最後只剩下乙隻猴子為止,那只猴子就叫做大王。要求程式設計模擬此過程,輸入m n,輸出最後那個...
約瑟夫環 VC 實現
問題描述 設編號為1,2,n n 0 的人按順時針方向圍坐一圈,每人持有乙個正整數密碼。開始時任意給出乙個報數上限值m,從第乙個人開始沿順時針方向自1起順序報數,報到m時停止報數,報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人起重新自1起順序報數 如此下去,直到所有人全部出列為止...