C迴圈鍊錶解決約瑟夫斯問題

2021-10-05 21:59:57 字數 933 閱讀 2014

問題描述:設有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個人,而當輪最後拿到刀子的人會將他的下乙個人殺掉,殺完後刀子會再傳給被殺的下乙個人。這樣一輪就算結束。...