迴圈鍊錶 約瑟夫問題

2021-07-24 08:37:34 字數 856 閱讀 2527

設編號分別為:1,2,...,n的n個人圍坐一圈。約定序號為k(1 <= k < = n)的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。

演算法思路:  1、先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。

2、找到第k個結點,即第乙個開始報數的人。

3、編號為k的人從1計數,計到m時,對應結點從鍊錶中刪除;然後再從被刪除結點的下乙個結點起又從1開始計數....,直到所有結點都列出時演算法結束。

**如下:

#include #include #define listsize 100

typedef int datatype;

typedef struct node

listnode,*linklist;

linklist createcyclist(int n);

void josephus(linklist head, int n, int m, int k);

void main()

linklist createcyclist(int n)

r->next = head;

return head;

}void josephus(linklist head, int n, int k, int m)

while (p->next != p)

q->next = p->next;

printf("%4d", p->data);

free(p);

p = q->next;

} printf("%4d\n", p->data);

}

(迴圈鍊錶)約瑟夫問題

time limit 1000 ms memory limit 65536 kib submit statistic n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的...

迴圈鍊錶 約瑟夫問題

n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的編號。input 輸入n和m值。output 輸出勝利者的編號。struct st cr int n 建立迴圈鍊錶 t...

迴圈鍊錶 約瑟夫問題

約瑟夫問題大意 在羅馬人占領喬塔帕特後,39個猶太人與約瑟夫及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而約瑟夫和他的朋友並不想遵從...