約瑟夫問題3 出列序列(鍊錶)

2021-07-15 02:58:08 字數 827 閱讀 7278

【問題描述】

m 個人圍成一圈,任意指定乙個人為其編號為 1,餘下的人按順時針依次編號為 2 到 m ,其中編號為 m 的人與編號為 1 的人相鄰。

現在以編號為 s(1<=s<=m) 的人為起點,開始順時針報數,報到 n 的人出列;然後以出列人的左邊的人為起點,開始逆時針報數,報到 k 的人出列;接著再以出列的人右邊的人為起點,開始順時針報數,報到 n 的人出列……。就這樣按順時針和逆時針方向交替不斷報數,直到全部人出列為止。請你輸出出列人的編號序列。

【輸入格式】

第一行包含三個整數m,n,k 和 s。

【輸出格式】

一行,包含m個數,表示出列人先後的編號序列,每兩個數之間僅乙個空格。

【輸入樣例】

6 2 3 1

【輸出樣例】

2 5 1 3 6 4

【資料範圍】

n<=20000

資料不大,直接用鍊錶模擬出報數出列的過程就行了。唯一要注意的地方是報數時需要少執行一次指標移動的操作,因為報數的人報到了n和k就要立刻出列。

#include

#define maxn 20005

using namespace std;

intm,n,k,s;

intlast[maxn],next[maxn];

void link(int a,int b)

int main()

last[1]=m;

bool time=0;

while(m!=0)

else //逆

}return

0;}

迴圈鍊錶 約瑟夫問題

設編號分別為 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...