約瑟夫環的實現《報數遊戲》

2021-05-28 07:40:50 字數 848 閱讀 3826

面試中經常會被問到報數遊戲。遂實現一下。

問題描述:

設有n個人圍坐一圈並按順時針方向從1到n編號,從第s個人開始進行1到m報數,報數到第m個人時,此人出圈,再從他的下乙個人重新開始1到m的報數,如此進行下去直到所有的人都出圈為止。現要列印出出圈次序。

輸入:n 遊戲總人數 s 報數的起始編號 m 報數的數值

輸出:p 指向長度為n的陣列,出圈次序儲存在p指向的陣列中

示例 n=7 s=2 m=3 出圈次序為:4 7 3 1 6 2 5

n=3 s=1 m=2 出圈次序為:2 1 3

用迴圈鍊錶實現如下:

#include using namespace std;

typedef struct tagnode

node;

void joseph(int count, int start, int steps)

p->data = count; //最後一位隊員最後特殊處理,形成迴圈鍊錶

p->next = head;

p= head;

while(p->next != p)

cout}

q=p->next;

coutp->next = q->next; //重新連線鍊錶

delete q;

start = p->next->data; //p所指隊員的下一位為下一輪第乙個報數隊員

} }coutdelete p;

cout<>count>>start>>steps;

joseph(count,start,steps);

return 0;

}

報數遊戲(約瑟夫環問題)

題目描述 有n個小朋友做遊戲,他們的編號分別是1,2,3 n。他們按照編號從小到大依次順時針圍成乙個圓圈,第乙個小朋友從1開始報數,依次按照順時針方向報數 報數的值加一 每個報m的人會離開隊伍,然後下乙個小朋友會繼續從1開始報數,直到只剩下乙個小朋友為止。求最後一位小朋友的編號。input 輸入兩個...

報數問題(約瑟夫環)

解法一 用陣列模擬 include using namespace std intmain sign 實際標號的 if sign 0 sign n 1 if i n 1 cout loop sign 0 return0 解法二 從位置考慮,舉例說 nnum 5 move 212 3453 4515 ...

報數字(約瑟夫環)

description 佳佳和幼兒園裡的小朋友經常一起玩乙個遊戲 n個小朋友坐成一圈,從第乙個小朋友開始報數,從1開始依次報,每個報到m的小朋友要起來表演節目,然後那個小朋友從圈裡出去,接下來的小朋友繼續從1開始。直到只剩下最後乙個小朋友。佳佳一點也不喜歡自己表演,所以他想知道的是,他坐在哪個位置,...