1.實驗題目
約瑟夫(joeph)問題的一種描述是:編號為 1,2,…,n 的 n 個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值 m,從第乙個人開始按順時針方向自 1 開始順序報數,報到 m 時停止報數。報 m 的人出列,將他的密碼作為新的 m 值,從他在順時針方向上的下乙個人開始重新從 1 報數,如此下去,直至所有人全部出列為止。試設計乙個程式求出出列順序。
2.需求分析
利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序印出各人的編號。
① 程式所能達到的功能:完成單向迴圈鍊錶的建立,以及相應操作解決約瑟夫問題
② 測試資料:
m 的初值為 20;密碼:3,1,7,2,4,8,4(正確的結果應為 6,1,4,7,2,3,5)
#include
#include
using
namespace
std;
typedef
int elemtype;
typedef
struct node
*linklist;
linklist createlist(int n, vector
g)p->num = n;
p->psd = g[n - 1];
p->next = l;
return l;
}void fun(linklist &l1, int m)
cout
<< a->num;
m = a->psd;//b是前驅結點
b->next = a->next;
node *c = a;
a = a->next;//刪除目標結點
delete c;
}cout
<< a->num;
}vector
v;int main()
linklist circlelist = createlist(n, v);
fun(circlelist, m);
return
0;}
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...