描述
約瑟夫環是乙個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
輸入8 1 3 (n=8 k=1 m=3 )
輸出7 (剩下的那個)
樣例輸入
8 3 1
樣例輸出
7該問題資料總共有三個,分別是總人數,開始報數的人的序號,數到第幾個人出列。要求輸出最後乙個人的序號。
首先是n個資料,由題目可以得出這n個資料圍成乙個圓,因此可以按照c++中迴圈單鏈表來處理資料。如下圖為約瑟夫環的圖示:
由圖可以看出先從編號為k的人開始報數,數到m的那個人出列,出列後的人需刪除資料,下乙個人從1開始報數。直至這一組資料剩餘1;
struct node
;
接下來是鍊錶的構造
int main()
last->next=first;
last=first;
for(int as=1;as<=k-1;as++)//迴圈鍊錶至第m個元素
while(last!=last->next)
q=last->next;
last->next=q->next;//如果m=1則該演算法不正確,所以前面補充m==1的情況
delete q;
last=last->next;
} cout
golang資料結構之用迴圈鍊錶解決約瑟夫環問題
josephu.go package link import fmt type kid struct func addkid num int kid cur kid if num 1 for i 1 i num i if i 1 else cur.next tmpkid cur tmpkid cur...
C語言迴圈鍊錶解決約瑟夫問題
joseph problem 35分 題目內容 實作joseph problem.假設一開始有n個人,編號1 n,按照順序以順時針圍成乙個圓圈。遊戲開始時,編號1的人拿刀。之後每一輪刀子會被往下傳m個人,而當輪最後拿到刀子的人會將他的下乙個人殺掉,殺完後刀子會再傳給被殺的下乙個人。這樣一輪就算結束。...
C迴圈鍊錶解決約瑟夫斯問題
問題描述 設有n個人圍坐成乙個圓圈,按一定指向方向,從第s個人開始報數,數到m的人出列,然後從下乙個人重新報數,數到m的人又出列,直到n個人全部出列為止。輸入 n m s,按次序輸出得到的n個人的順序表。include using namespace std typedef int datetype...