一、問題描述:約瑟夫問題
乙個旅行社要從n個旅客中選出一名旅客,為他提供免費的環球旅行服務。旅行社安排這些旅客圍成乙個圓圈,從帽子中取出一張紙條,用上面寫的正整數m(二、任務要求
(1)用單迴圈鍊錶解決約瑟夫問題。
(2)用順序表解決約瑟夫問題。
以上二選一
三、測試資料
輸入說明,輸入的第一行表示總的旅客數,輸入的第二行表示報數值,輸入的第三行表示報數人的起始編號。
輸入樣例:
輸出說明,輸出這n個人的淘汰順序
輸出樣例:
1. 分析問題:
(1)假設有9名旅客,編號為1,2,……,9。從編號為1的這個人開始從1報數,當報到5時的那個人淘汰,接著接下來的那個人開始又從1開始報數,直到最後只剩乙個人。
(2)順序表的儲存結構
#define n 100//順序表可能達到的最大長度
typedef structlist;
2. 完整**:
#include
#include
#define n 100//巨集定義,順序表可能達到的最大長度
typedef structlist;//結構體型別為list
int printlist(list *l)//構建乙個順序表l
int i,m,n,s,j;
scanf("%d%d%d",&n,&m,&s);
for(i=0;il->data[i]=i+1;//將旅客進行編號
i=s-1;
printf("輸出%d個人的淘汰順序:\n");
while(n>1)
i=(i+m-1)%n;//通過模運算算出將要淘汰的下標
printf("%d\n",l->data[i]);//輸出淘汰的編號
for(j=i+1;jl->data[j-1] = l->data[j];//將後乙個數放在淘汰的數對應的位置
n--;
if(i==n)
i=0;
printf("%d\n",l->data[i]);//輸出最後乙個淘汰的編號
int main()
list l;//初始化順序表l
printlist(&l);//呼叫函式
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...