約瑟夫環問題2

2021-09-27 11:49:07 字數 1116 閱讀 3992

【題目描述】

約瑟夫環問題的一種描述是:編號為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報數,如此下去,直到所有人...