【題目描述】
約瑟夫環問題的一種描述是:編號為1,2,……,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數,報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新報數,如此下去,直至所有人全部出列。試設計乙個程式求出出列順序。
【基本要求】
利用單向迴圈列表儲存結構模擬此過程,按照出列的順序印出個人的編號。
【測試資料】
m的初值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4,首先m值為6,正確的出列順序為6,1,4,7,2,3,5。
【實現提醒】
設n<=30;
#include
#include
#define n 30
//n<=30;
int a[n]
;//定義乙個全域性的陣列用來儲存每個人的密碼
typedef
struct nodenode,
*lnode;
lnode initlnode
(int n)
tail->next=head->next;
return head->next;
}void
dele_list
(lnode list,
int n,
int m)
tail->next=p->next;
printf
("出列的下標為:%d\n"
,p->data)
; m=a[p->data]
;//把第m個節點的密碼賦給m
free
(p);
//刪除第m個節點
p=tail->next;
}printf
("出列的下標為:%d\n"
,p->data)
;//因為上面那個迴圈並不能正好把列表中的節點釋放完,最後還剩乙個,需要單獨釋放
free
(p);
}int
main()
要點:1.出隊函式中的迴圈條件
2.迴圈並不能刪除所有節點
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫環問題
約瑟夫環問題 問題描述 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...