約瑟夫問題

2021-08-10 10:42:25 字數 1063 閱讀 9419

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個人為止。問怎樣排法,才能使每次...