約瑟夫問題

2021-10-03 04:04:08 字數 1618 閱讀 2250

(

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

問題分析與演算法設計

約瑟夫問題並不難,但求解的方法很多;題目的變化形式也很多。這裡給出一種實現方法。

題目中30個人圍成一圈,因而啟發我們用乙個迴圈的鏈來表示,可以使用結構陣列來構成乙個迴圈鏈。結構中有兩個成員,其一為指向下乙個人的指標,以構成環形的鏈;其二為該人是否被扔下海的標記,為1表示還在船上。從第乙個人開始對還未扔下海的人進行計數,每數到9時,將結構中的標記改為0,表示該人已被扔下海了。這樣迴圈計數直到有15個人被扔下海為止。

c++

#include

#include

#include

using

namespace std;

intmain()

t=8;

k=0;

while

(t>0)

}}}}

return0;

}

#include

using

namespace std;

main()

;int n,m,i,f=

0,t=

0,s=0;

cin>>n>>m;do}

while

(f!=n)

;//直到所有人都被殺死為止

}

pascal

var 

a:array [1.

.20] of integer;

n,m,i,j,k,n1,m1:integer;

begin

readln(m,n)

;for i:

=1 to m do

a[i]

:=i;

m1:=m;

n1:=1;

while m1>

0 do

begin

j:=(n+n1-1-

1) mod m1 +1;

n1:=j; m1:

=m1-1;

writeln(a[j]);

for k:

=j to m1 do

a[k]

:=a[k+1]

;end;

end.

約瑟夫環(佇列做法)

}用佇列可以方便許

約瑟夫問題 約瑟夫環

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

約瑟夫問題 約瑟夫環

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

約瑟夫問題

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