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