據說著名猶太歷史學家 josephus有過以下的故事:在羅馬人占領喬塔帕特後,39
個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個
人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josephus
和他的朋友並不想遵從,josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。
前見天寫了迴圈鍊錶,用迴圈鍊錶要實現這個問題。
#include struct node;
typedef struct node node;
#define size sizeof(node)
int num=1;//計算迴圈鍊錶的節點個數 頭節點已經建立好了 有乙個節點了
//建立節點
node* cretenode(int d)
//建立鍊錶
void creatlist(node** h)
pn=cretenode(d);
++num;
p->next=pn;
p=p->next;
}}int main()
printf("%d->",p->next->data);
temp=p->next;//刪除死亡的人
p->next=temp->next;
free(temp);
p=p->next;
}printf("%d\n",p->data);
return 0;
}
請輸入資料 8
請輸入資料 9
請輸入資料 7
請輸入資料 65
請輸入資料 4
請輸入資料 1
請輸入資料 2
請輸入資料 3
請輸入資料 0
7->1->8->4->9->3->65->2
資料結構 約瑟夫環
問題描述 約瑟夫環問題的一種描述是 編號為1,2,n的n個人按順時針的方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個人開始重新報數,如此下...
C 資料結構與演算法 解決約瑟夫環問題
問題描述 編號為 1 n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數 1,2,3 這樣依次報 數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。方法 遞迴 優點 少 缺點 效率低,堆疊會溢位 其實這道題還可以用遞迴來解決,...
資料結構 約瑟夫環問題
實驗一線性表的應用 實驗目的和要求 通過實驗進一步理解線性表的邏輯結構和儲存結構,提高使用理論知識指導解決實際問題的能力,熟練掌握鍊錶的實際應用。主要內容 題目1 josephus環問題 問題描述 約瑟夫 joseph 問題的一種描述是 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼...