BIT2018 DS SS 約瑟夫問題與迴圈鍊錶

2021-08-29 01:13:06 字數 961 閱讀 1939

約瑟夫問題是乙個經典的問題(大一我們講過)。這個問題可以用陣列,也可以用鍊錶。作為複習,大家可以試試你自己的演算法。

已知n個人(不妨分別以編號1,2,3,…,n 代表 )圍坐在一張圓桌周圍,從編號為 k 的人開始,從1開始順時針報數1, 2, 3, ...,順時針數到m 的那個人,出列並輸出。然後從出列的下乙個人開始,從1開始繼續順時針報數,數到m的那個人,出列並輸出,…依此重複下去,直到圓桌周圍的人全部出列。

輸入:n, k, m

輸出:按照出列的順序依次輸出出列人的編號,編號中間相隔乙個空格,每10個編號為一行。

非法輸入的對應輸出如下

a)輸入::n、

k、m任乙個小於

1輸出:

n,m,k must bigger than 0.b)

輸入:k>n

輸出:k should not bigger than n. 例:

輸入:9,3,2

輸出:4 6 8 1 3 7 2 9 5

#include#includestruct node

;typedef struct node node;

typedef struct node * pnode;

main()

if( k > n )

if( flag == 1 )

while ( p -> next!=head )

p = p -> next;

p -> next = head -> next;

/*建立迴圈鍊錶*/

for( i = 0; i < k; i++ )

p = p -> next;/*找出起始位置*/

for(i = 0; i < n ; i++)

if( i == n -1 || (i+1)%10==0)

free(q);/*報數找出剔除的人*/}}

}}

迴圈鍊錶 約瑟夫問題

設編號分別為 1,2,n的n個人圍坐一圈。約定序號為k 1 k n 的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。演算法思路 1 先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。2 找到第k個結點,即第乙個開始報數的人...

(迴圈鍊錶)約瑟夫問題

time limit 1000 ms memory limit 65536 kib submit statistic n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的...

迴圈鍊錶 約瑟夫問題

n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的編號。input 輸入n和m值。output 輸出勝利者的編號。struct st cr int n 建立迴圈鍊錶 t...