約瑟夫問題

2021-10-08 21:27:42 字數 1029 閱讀 6456

description

n個人想玩殘酷的死亡遊戲,遊戲規則如下:

n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。

請輸出最後乙個人的編號。

input

輸入n和m值。

output

輸出勝利者的編號。

sample

input

5 3output

4hint

第一輪:3被殺;第二輪:1被殺;第三輪:5被殺;第四輪:2被殺。

#include

#include

struct node

;int

main()

tail->next = head;

//以上就是正常的單鏈表的順序建立,此題由題意知為迴圈鍊錶,該題的迴圈鍊錶的建立就是在建立完單鏈表之後讓尾結點指向頭結點即可

t = tail;

p = head;

//定義兩個工作指標,輔助結點的刪除

sum =0;

while

(sum !=

(n -1)

* m)

//這裡我會在下面進行解釋

else

}printf

("%d"

, p->data)

;}

**中有乙個sum!=(n-1)×m;這是怎麼來的呢?首先看,我們是輸入n個數,但最後只留下乙個數,也就是說刪掉了(n-1)個數,每刪乙個數我們都數m個數,所以操作完(只剩下最後乙個數)之前我們設的變數sum在這時會等於(n-1)×m,因此while迴圈終止,輸出data即可,至於是p->data;還是t->data;都是一樣的

t->next = p->next;

p = p->next;

最後剩下兩個數,p->next是t;t->next就是t,而且p=p->next,所以p和t為同乙個結點。

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...