面試中經常會被問到報數遊戲。遂實現一下。
問題描述:
設有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開始。直到只剩下最後乙個小朋友。佳佳一點也不喜歡自己表演,所以他想知道的是,他坐在哪個位置,...