問題描述:設有n個人圍坐成乙個圓圈,按一定指向方向,從第s個人開始報數,數到m的人出列,然後從下乙個人重新報數,數到m的人又出列,…,直到n個人全部出列為止。
輸入:n m s,按次序輸出得到的n個人的順序表。
#include
using
namespace std;
typedef
int datetype;
typedef
struct node//構建鍊錶節點
listnode,
*linklist;
//節點與表頭指標
void
createcirclelinklist
(linklist &rear,
int n)
//建立鍊錶
p->next = rear;
//迴圈鍊錶的構建
pre = rear;
//pre 指向鏈首節點
rear=p;
//rear 指向鏈尾節點
}void
josephus
(linklist &rear,
int m,
int s)
//約瑟夫斯 問題
while
(rear-
>next!=rear)
//當迴圈鍊錶不為乙個節點
p=rear-
>next;
cout<>data<<
" "
; rear-
>next=p-
>next;
//將報到m的人出列
delete p;
} cout << rear-
>data;
}int
main()
迴圈鍊錶解決約瑟夫 問題
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...
迴圈鍊錶解決約瑟夫迴圈問題
最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...
C語言迴圈鍊錶解決約瑟夫問題
joseph problem 35分 題目內容 實作joseph problem.假設一開始有n個人,編號1 n,按照順序以順時針圍成乙個圓圈。遊戲開始時,編號1的人拿刀。之後每一輪刀子會被往下傳m個人,而當輪最後拿到刀子的人會將他的下乙個人殺掉,殺完後刀子會再傳給被殺的下乙個人。這樣一輪就算結束。...