队列
队列是一种“先进先出”的数据结构,即只能向队尾插入元素,队首取出元素。
STL queue
在c++的stl库中,定义了queue为队列。常见的操作如下:
queue<Type> q; // 声明一个队列 q.push(); // 向队尾插入元素 q.pop(); // 删除队首元素 q.front(); // 访问队首元素(不删除) q.back(); // 访问队尾元素(不删除) q.size(); // 返回队列大小 q.empty(); // 返回队列是否为空
例题:约瑟夫问题
题目描述
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入格式
输入两个整数 n,m。
输出格式
输出一行 n 个整数,按顺序输出每个出圈人的编号。
样例 #1
样例输入 #1
10 3
样例输出 #1
3 6 9 2 7 1 8 5 10 4
提示
1 \le m, n \le 100
代码:
#include<bits/stdc++.h> using namespace std; const int N = 2e6 + 5, P = 13331, INF = 1e9; int main() { int n, m; queue<int> q; cin >> n >> m; for (int i = 1; i <= n; i++) q.push(i); int cnt = 0; while (!q.empty()) { cnt++; if (cnt == m) { cout << q.front() << " "; q.pop(); cnt = 0; } else { int tmp = q.front(); q.pop(); q.push(tmp); } } return 0; }