題目:
????????
Description
n?個人圍成一圈,從第一個人開始報數,數到?m?的人出列,再由下一個人重新從?1?開始報數,數到m?的人再出圈,依次類推,直到所有的人都出圈,請輸出依次出圈人的編號。
注意:本題和《深入淺出-基礎篇》上例題的表述稍有不同。書上表述是給出淘汰?n?1?名小朋友,而該題是全部出圈。
Input
輸入兩個整數?n,m。
Output
輸出一行n?個整數,按順序輸出每個出圈人的編號。
Sample 1
Inputcopy | Outputcopy |
10 3 | 3 6 9 2 7 1 8 5 10 4 |
Hint
≤1001≤m,n≤100
解題思路:
用STL容器的,queue隊列來寫:
? ? ? ? 一個一個的報數,可以想象成一個隊列,一個人報完數后,判斷他所報的數是不是出局的數,如果是,直接彈出,但若不是,將其移動至隊尾。我們使用一個隊列之前,需要加上頭文件<queue>
代碼如下:
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main()
{int n, m, nowNum = 1;cin >> n >> m;queue<int> q;for(int i = 1; i < n; i++) q.push(i); //初始化隊列while(!q.empty()) //在隊列不為空時繼續{if(nowNum == m){cout << q.front << " "; //打印出局的人的編號q.pop(); //出局nowNum = 1; //初始化現在的數字}else{nowNum++;q.push(q.front()); //排至隊尾q.pop();}}cout << endl;return 0;
}