PHP實現約瑟夫環

2021-07-27 22:55:08 字數 3508 閱讀 4027

題目:有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)

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

10號位的人為所求解

約瑟夫環實現

約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 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起順序報數 如此下去,直到所有人全部出列為止...