約瑟夫問題

2021-06-26 17:40:09 字數 1207 閱讀 2478

最近在做資料結構的助教,給大二的小盆友講解資料結構實驗,第一次實驗為線性表及其應用,其中實驗內容肯定就是著名的約瑟夫問題了,寫這個部落格的原因就是幫助剛開始接觸資料結構的初學者們更好的理解鍊錶,我主要就是分析**,並且給出的**都是通俗易懂的,希望大家看完後能夠有所收穫,廢話不多說,上題。

設有n個人圍坐在圓桌周圍,現從某個位置m(1<=m<=n)上的人開始報數,報數到k的人就站出來。下乙個人,即原來的第k+1個位置上的人,又從一開始報數,再報到k的人站出來。依次重複下去,直到全部的人都站出來為止。試設計乙個程式求出列序列。

**解答如下:

#include #include #define null 0

#define ok 1

#define error 0

#define overflow -2

typedef int status;

typedef int elemtype;

typedef struct cnode

cnode;

cnode *joseph; //定義乙個全域性變數

status cteate_clist(cnode *clist, int n)

p->data = i;//給資料域賦值

p->next = clist;//把生成的結點接在鍊錶上

clist = p;//同時移動clist,使得它總指向最新的結點

if (i == n)

q = p;//用q指向鍊錶的最後乙個結點,暫時儲存的作用

} q->next = clist;//把鍊錶的最後乙個結點的鏈域指向鍊錶的第乙個結點,構成迴圈鍊錶

joseph = clist;//把建立好的迴圈鍊錶的頭指標賦給全域性變數

return ok;

}status joseph(cnode *clist, int m, int n, int k)

while (p)

q = p->next;//q指向第k個結點

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

if (p->next == p)

else

}clist = null;

return ok;

}void main()

執行結果如下:

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...