佇列實現約瑟夫問題

2022-06-23 14:21:10 字數 768 閱讀 8942

描述約瑟夫問題:

有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接著從1開始報數。就這樣,直到圈內只剩下一隻猴子時,這個猴子就是猴王,程式設計求輸入n,m後,輸出最後猴王的編號。

輸入

每行是用空格分開的兩個整數,第一個是 n, 第二個是 m ( 0 < m,n <=300)。最後一行是:0 0

輸出

對於每行輸入資料(最後一行除外),輸出資料也是一行,即最後猴王的編號

樣例輸入

6 2

12 4

8 30 0

樣例輸出
5

17

解題思路:

就用佇列指定一個規則,不滿足規則的就出隊,留下的就是符合規則的。

//佇列實現約瑟夫問題

# include# includeusing namespace std;

queueq;

int result(int n,int m)

q.pop();

j=m;

n--;

} return q.front();

}int main()

return 0;

}