用單向迴圈鍊錶來表示圈,將人殺死後修改鍊錶上的節點即可。
package linkedlist;
// 約瑟夫問題:環形鏈
public
class
josepfu
}// 構建乙個環形鏈的class
class
circularlinkedlist
// 輸入數字為1
firstperson =
newperson(1
);if(number==1)
//輸入數字大於1
for(
int i=
2;i<=number;i++
) tempperson.
setnext
(currentperson)
; currentperson.
setnext
(firstperson)
; tempperson = currentperson;}}
/* * 檢視環裡的詳情
*/public
void
showperson()
person tempperson = firstperson;
//用於遍歷節點的臨時變數
while
(true)}
}/** 約瑟夫問題的解決方案
*/public
void
josepfu
(int startnum,
int eliminatepersonindex,
int wholenum)
if(firstperson == null)
if(wholenum<1)
int count =0;
//用於計數
// 找到最開始計數的那個人
for(
int i=
0;i< wholenum + startnum-
1;i++
)// 遍歷
while
(count
// 去掉該該節點
system.out.
printf
("第%d個人要去掉\n"
,currentperson.
getnum()
);
currentperson = currentperson.
getnext()
; tempperson.
setnext
(currentperson)
;//去掉乙個節點就計數一次
count++;}
}}// 建立乙個person類
class
person
// 獲取每乙個節點的no序號
public
intgetnum()
// 新增人到環中
public
void
setnext
(person next)
// 獲取每乙個節點的next節點
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...