x個人圍成一圈,每個人手裡都有不同的密碼,選擇乙個人,從他開始,以他的密碼為初始開始報數,如果有人報的數字為1,這個人退出並且以退出這個人手中的密碼作為新的起始,直到所有人都出列他為止
//標頭檔案 不說了
struct man
;typedef struct man node;
typedef node* ptr;
int main()
ptr creatlink
(int num)
last = head;
//將頭結點的位址賦值給尾結點
for(i =
0; i < num; i++
)//迴圈輸入所有人的密碼放到對應的結點的對應資料域(對應的次序)
previous-
>next = last;
} previous-
>next = head;
//迴圈結束,多餘的結點不需要,最後乙個結點直接指向頭結點,形成迴圈
free
(last)
;//釋放多餘的結點
last = previous;
//最後乙個結點複製給last結點
return last;
}void
show
(ptr head, int num)
previous-
>next = last-
>next;
//尾指標的下乙個指標複製給當前指標的下乙個指標
printf_s
("%d"
, last-
>num)
;//列印尾指標的資料域的序號
num1 = last-
>password;
//將尾指標資料域的密碼賦值給num1;
free
(last)
;//釋放尾指標
last = previous-
>next;
//將當前指標的指標域next指向尾指標
}}
C語言 資料結構迴圈鍊錶解決約瑟夫環問題
用c語言實現迴圈鍊錶解決問題 具體測試 假設有n個人圍成一圈,然後對每個人按順序編號1,2,3,n,規定從1號按順序開始報數,報到k的人出局,之後下乙個人再從1開始報數,報到k的人在出局,一直進行下去,問 最後乙個出局者為幾號?假設有8個人,每次報數報到4的人出局,則過程如下。四號出局 八號出局 五...
迴圈鍊錶解決約瑟夫迴圈問題
最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...
迴圈鍊錶解決約瑟夫 問題
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...