有這樣乙個問題,有n個人圍成一圈做遊戲,編號為1->2->3->...->1,讓第m個人開始報數,報到底k個數的那個人出隊,出隊的下乙個人繼續報數,報到第k個數的人再出隊。。。以此類推,求出最後乙個出隊的人。
這個問題可以轉化成資料結構的迴圈鍊錶問題。具體抽象為建立迴圈鍊錶,輸出鍊錶,按照題意找到符合要求的那個結點並刪除,迴圈刪除的過程,直到迴圈鍊錶只剩下乙個元素,即為最後乙個出隊的元素。 具體的**和過程如下:(以n=5,m=2,k=2為例)
public class demo1
}class node
}class cyclink
//建立環形鍊錶
public void creatlink()elseelse}}
}//設定第m個人報數
public void setm(int m)
//設定報幾個數
public void setk(int k)
//開始遊戲
public void play()
//找到出隊的人
for(int j=1;jtemp = temp.nextnode;
}//出隊
while(temp2.nextnode!=temp)
temp2.nextnode=temp.nextnode;
temp=temp.nextnode;
this.len--;
//輸出最後乙個出隊的人
system.out.println("the last person's number is "+temp.no);
}//列印迴圈鍊錶
public void show()while(temp!=this.firstnode);
}實現的結果截圖:
java實現約瑟夫問題
原始問題描述 據說著名猶太歷史學家josephus有過以下的故事 在羅馬人占領喬塔帕特後,39個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報...
python實現約瑟夫 約瑟夫問題python實現
python語言之如何實現約瑟夫環問題 def josephus n,m if type n 60個人從1開始編號每人拿乙個號碼牌排成圈,從 1開始報數,第一次報數 totalnum 猴子總數 startnum 開始序號 intervalnum 間隔數def kingelect totalnum,s...
約瑟夫問題的實現
約瑟夫問題的實現 2000 ms 65535 kb 2816 8761 n個人圍成乙個圈,每個人分別標註為1 2 n,要求從1號從1開始報數,報到k的人出圈,接著下乙個人又從1開始報數,如此迴圈,直到只剩最後乙個人時,該人即為勝利者。例如當n 10,k 4時,依次出列的人分別為4 8 2 7 3 1...