C 鍊錶解決Open Judge約瑟夫環問題

2021-09-27 09:24:41 字數 849 閱讀 1568

描述

約瑟夫環是乙個數學的應用問題:已知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...