資料結構之約瑟夫環

2021-09-01 03:03:41 字數 1011 閱讀 7118

@[資料結構之約瑟夫環(c語言實現)]。

因為最近在學習資料結構和做相關的實驗,所以想把自己的所做的分享一下

設有編號為1,2,…,n的n(n>0)個人圍成乙個圈,每個人持有乙個密碼m。從第乙個人開始報數,報到m時停止報數,報m的人出圈,再從他的下乙個人起重新報數,報到m時停止報數,報m的出圈,……,如此下去,直到所有人全部出圈為止。

需要用到迴圈鍊錶 首先需要定義鍊錶

typedef struct linklist

linklist;

接下來我們需要建立乙個迴圈鍊錶,**如下:

linklist* create_list(int m )//控制鍊錶中元素的個數

p->next=head;//記住得收首尾相連

return head;//返回頭指標

}

當我們建立完迴圈鍊錶後,我們就可以來解決問題啦,即對迴圈鍊錶進行操作。每迴圈m個人,輸出此人對應的編號,並將對應的鍊錶free掉,由此最終可以得到將所有的人出圈的順序。

讓我們來一起實現以下吧!

void num(linklist *head,int n,int m)  //n:總人數     m:出列的數字

}

當我們已經將迴圈鍊錶和對應的操作完成時,我們就可以解決約瑟夫環的問題了。

#include#include//定義乙個鍊錶

typedef struct linklist

linklist;

linklist* create_list(int m )//控制鍊錶中元素的個數

p->next=head;

return head;//返回頭指標

}void num(linklist *head,int n,int m) //n:總人數 m:出列的數字

}int main()

} return 0;

}

這樣問題就解決了。

資料結構之約瑟夫環問題

有 n 個人,按 1 到 n 編號,要求從第 s 個人開始迴圈報數,報到 m 時,此人出列,再從下乙個人開始報 m個數,直到所有人出列。給出 n 個人出列的順序。include stdio.h typedef struct nodelnode,linklist void creatjoseph li...

C 之約瑟夫環

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

C 之約瑟夫環

0,1,2,3,n 1這n個數排成乙個圈,從數字0開始,每次在圓圈裡面剔除第m個數字。求出這個圓圈最後乙個數字。乙個是使用鍊錶來模擬這個過程 使用公式推導 鍊錶模擬 int lastremaining solution int n,int m else return peoples.begin 公式...