題目要求的約瑟夫環操作:編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計乙個程式來求出出列順序。所以這個不能使用頭節點;
//迴圈鍊錶解決約瑟夫環的問題;
//分三步:1 建立n個連線點,無頭節點的迴圈鍊錶;
// 2 確定第乙個報數人的位置;
// 3 不斷的從鍊錶中刪除鏈節點,直到鍊錶為空;
#include#includeusing namespace std;
//節點類;
class node ;
//鍊錶類;
class josephu
void creatlist(vector&nums);
void func(int m);
private:
node *head;
int n = 0;
};void josephu::creatlist(vector&nums)
head->data = nums[0];
curr->next = head;
}void josephu::func(int m)
p->next = report->next;
m = report->data;
cout << m << " ";
cout << endl;
delete(report);
report = p->next; }
}int main()
; stem.creatlist(itec);
stem.func(3);
system("pause");
return 0;
}
迴圈鍊錶解決約瑟夫環問題
問題描述 假設有n個小孩按照序號1,2,n圍坐成一圈,從第乙個小孩開始報數,每次報到n的人退出,接著從下乙個人重新開始從1開始報數,下一次再報到n的人退出,求最後乙個留下的人 小孩的個數n,和報數的n由鍵盤輸入 輸出留下人的序號 乙個迴圈鍊錶都寫得除出了很多問題,改了半天才出來 include in...
迴圈鍊錶解決約瑟夫環問題
約瑟夫環問題可以簡單的使用陣列的方式實現,但是現在我使用迴圈鍊錶的方法來實現,因為上午看到一道面試題規定使用迴圈鍊錶解決約瑟夫環問題。什麼是約瑟夫環?這道面試題考察了迴圈鍊錶的 建立 遍歷 和 刪除 建立的迴圈鍊錶的結構圖 解決約瑟夫環問題的過程 c 實現 如下 1 迴圈鍊錶解決約瑟夫環問題 2 問...
用迴圈鍊錶解決約瑟夫環問題
題目見 解法 includeusing namespace std templatestruct node class nodelist void insert node newnode else node josephusremove int interval if head p head p n...