/*約瑟夫環
(問題描述)
約瑟夫問題的一種描述是:編號為1,2,......n,的n個人按順時針方向圍坐一圈,每個人持有一個密碼(正整數)。一開始任意選
一個正整數作為報數的上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新
的m值,從他在順時針方向下一個人開始從1報數,如此下去,直至所有人全部出列為止。試設計一個程序求出出列順序。
(基本要求)
利用單向循環鏈表存儲結構模擬此過程,按照出列順序印出個人的編號。
(測試數據)
m的初值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4,首先m為6(正確的出列順序應為6,1,4,7,2,3,5)。
下面是我的解決方法:
根據問題所描述的,這是個環問題,我們可以先模擬一個環.
聲明:我這裡是用雙向鏈表的,雖然對這個問題沒太大意義,但我還是保留為雙向的,因為我在考慮這個問題可以衍生出很多其它問題來,只為我自己所用而以。呵呵……為了性能,而且只是解決這一個問題,你可以改成單向鏈表。
public class Circle
{
public class Node
{
private Node preNode;
private Node nextNode;
private int id;
private uint password;
public Node PreNode
{
get {
return preNode;
}
set {
preNode = value;
}
}
public Node NextNode {
get {
return nextNode;
}
set {
nextNode = value;
}
}
public int ID
{
get {
return id;
}
set {
id = value;
}
}
public uint Password
{
get {
return password;
}
set {
password = value;
}
}
}
private Node firstNode = null;
private Node lastNode=null;
private Node nextNode = null;
private int count = 0;
public int Count
{
get {
return count;
}
set {
count = value;
}
}
public Circle()
{
}
public void Add(int id,uint password)
{
count++;
No