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

2021-08-19 15:05:14 字數 1045 閱讀 9532

一:問題描述

約瑟夫環問題是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列,他的下乙個人又開始報數,數到m的那個人又出列,依次規律重複下去,圓桌周圍的人全部出列。

二:演算法原理

約瑟夫環運作如下:

1:一群人圍坐在一起成環狀

2:從某個編號開始報數(如:k)

4:一直迴圈,直到所有人出列,約瑟夫環出列

三:具體**實現如下:(保留了最後乙個編號)

#include#includetypedef struct nodelnode,*linklist;  

void josephus(int n, int m, int k)

p->data = i;//編號

if(list == null)

list = p;

else

x->next = p;//將x和p節點串起來

x = p;//x指標後移

} p->next = list;//建立乙個迴圈鍊錶

p = list;//p指標後移

for(i = 1; i < k; i++)

//此時p指向第1個出發點

while(p->next != p)

//p指向第m個結點,x指向第m-1個結點

x->next = p->next; //刪除第m個結點

printf("%d號自殺\n", p->data); //輸出乙個結點編號

free(p); //釋放被刪除結點的空間

p = x->next; //p指向新的出發點

} printf("最後能生存下來的為%d號\n", p->data); //輸出最後那個結點的編號

free(p);

} int main()

約瑟夫環問題(迴圈鍊錶)

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...