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

2021-08-29 18:51:41 字數 2109 閱讀 1447

joseph problem(35分)

題目內容:

實作joseph problem.

假設一開始有n個人,編號1~n,

按照順序以順時針圍成乙個圓圈。

遊戲開始時,編號1的人拿刀。

之後每一輪刀子會被往下傳m個人,

而當輪最後拿到刀子的人會將他的下乙個人殺掉,

殺完後刀子會再傳給被殺的下乙個人。

這樣一輪就算結束。

遊戲會進行許多輪,直到只剩下最後乙個人。

範例1:n=5, m=2

第一輪:刀子傳給3號,4號被殺,刀子再傳給5號 (1 2 3 5)

第二輪:刀子傳給2號,3號被殺,刀子再傳給5號 (1 2 5)

第三輪:刀子傳給2號,5號被殺,刀子再傳給1號 (1 2)

第四輪:刀子傳給1號,2號被殺,最後1號存活。

範例2:n=4, m=3

第一輪:刀子傳給4號,1號被殺,刀子再傳給2號 (2 3 4)

第二輪:刀子傳給2號,3號被殺,刀子再傳給4號 (2 4)

第三輪:刀子傳給2號,4號被殺,最後2號存活。

輸入格式:

輸入第一行為乙個數字t,代表測資的筆數。

接下來會有t筆測資,每一筆測資一行,

會有兩個數字n,m,數字間以空格區隔。

數字範圍:

t < 1000

0 < n <= 1000

0 < m <= 1000

輸出格式:

輸出一行數字,將每筆測資最後存活下來的人的編號加總。

輸入樣例:

5 24 3

8 4輸出樣例:

#include #include #define error null

typedef int elementtype;

typedef struct lnode *ptrtolnode;

struct lnode ;

typedef ptrtolnode position;

typedef ptrtolnode list;

position find(list l, elementtype x);

list insert(list l, elementtype x, position p);

list delete(list l, position p);

int main()

ptrtolnode p, q, temp;

p = l;

while (p->next)

p->next = l;

q = l;

while (q->next != q)

temp = q->next;

q->next = temp->next;

free(temp);

q = q->next;

} ans += q->data;

//printf("%d\n", q->data);

} printf("%d\n", ans);

}list insert(list l, elementtype x, position p)

current = l;

while (current&¤t->next != p)

if (current == null)

p->data = x;

p->next = current->next;

current->next = p;

return l;

}position find(list l, elementtype x)

return error;

}list delete(list l, position p)

while (p&&p->next != p)

if (p == null) // 如果找不到要刪除的節點

temp = p->next;

p->next = temp->next;

free(temp);

return l;

}

迴圈鍊錶解決約瑟夫 問題

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

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

最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...

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

問題描述 設有n個人圍坐成乙個圓圈,按一定指向方向,從第s個人開始報數,數到m的人出列,然後從下乙個人重新報數,數到m的人又出列,直到n個人全部出列為止。輸入 n m s,按次序輸出得到的n個人的順序表。include using namespace std typedef int datetype...